Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Occurrences in Mathematica

  • To: mathgroup at smc.vnet.net
  • Subject: [mg106366] Re: [mg106350] Occurrences in Mathematica
  • From: Leonid Shifrin <lshifr at gmail.com>
  • Date: Mon, 11 Jan 2010 05:26:46 -0500 (EST)
  • References: <201001100828.DAA05428@smc.vnet.net>

Hi George,

Here is a test list:

In[1]:=
test = RandomInteger[{1,30},30]

Out[1]=
{13,1,27,11,16,21,4,17,13,22,26,29,28,14,27,1,6,12,21,12,13,4,19,1,21,28,14,6,20,5}

One way to do what you want:

In[2]:=
Select[Tally[test],Last@#==1&][[All,1]]

Out[2]= {11,16,17,22,26,29,19,20,5}

If your elements are integers (or reals), you can make this code quite a bit
faster by compiling it:

In[3]   =
largetest = RandomInteger[{1, 30000}, 30000];

In[4]:=
fn = Compile[{{lst,_Integer,1}},
Select[Tally[lst],Last@#==1&][[All,1]],{{Tally[_],_Integer,2}}]

Out[4]=
CompiledFunction[{lst},Select[Tally[lst],Last[#1]==1&][[All,1]],-CompiledCode-]

In[5]:=
(res1 = Select[Tally[largetest],Last@#==1&][[All,1]]);//Timing
Out[5]= {0.231,Null}

In[6]:==
 (res2 = fn[largetest]); // Timing

Out[6]= {0.07, Null}

In[7]:=
res1 == res2

Out[7]= True

Hope this helps.

Regards,
Leonid






On Sun, Jan 10, 2010 at 12:28 AM, George <gtatishvili at gmail.com> wrote:

> Hi,
>
> I have a very big list of elements and I need Mathematica to give me
> only those elements which occure only once...
>
> Could anybody advise me please how to write the code for that?
>
> Thks much
> George
>
>


  • Prev by Date: Re: ODE Stiff Systems
  • Next by Date: Re: Occurrences in Mathematica
  • Previous by thread: Re: Occurrences in Mathematica
  • Next by thread: Re: Occurrences in Mathematica