微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算列表在Mathematica中获得多少个不同的值

如何解决计算列表在Mathematica中获得多少个不同的值

|| 我想获取列表中找到的不同值的数量。 例如: 列表
a={1,2,3,4,5}
输出为5,而whereas1ѭ的输出为2。     

解决方法

        仅出于娱乐目的,以下所有命令也可提供所需的结果:
Length@Gather@l

Length@Union@l

Length@Tally@l

Count[BinCounts@l,Except@0]

Count[BinLists@l,Except@{}]

Length@Split@Sort@l

Length@GatherBy[l,# &]

Length@Split@SortBy[l,# &]
当然还有更多。 编辑 这是一个定时实验(不严重)
l = RandomInteger[{1,10^2},10^7];
t2[x_] := {Timing[x],ToString[HoldForm@x]};
SetAttributes[t2,HoldAll]
Grid[Reverse /@
  {t2[Length@DeleteDuplicates[l]],t2[Length@Tally[l]],t2[Length@Gather[l]],t2[Count[BinCounts[l],Except@0]],t2[Length@Union[l]],t2[Length@Split@Sort@l],t2[Count[BinLists[l],Except@0]]},Frame -> All]
顺便说一句:请注意
BinLists[ ]
BinCounts[ ]
之间的区别 编辑
DeleteDuplicates
vs
Tally
的详细视图
t = Timing;
ListLinePlot@Transpose@
  Table[l = RandomInteger[{1,10^i},10^7];
   {Log@First@t@Length@DeleteDuplicates@l,Log@First@t@Length@Tally@l},{i,Range[7]}]
谨防!日志图!     ,        使用ѭ6(或旧版本中的ѭ10)删除重复的元素。然后,您可以计算返回列表中的元素。
In[8]:= Length[DeleteDuplicates[a]]
Out[8]= 5

In[9]:= Length[DeleteDuplicates[b]]
Out[9]= 2
    ,        
Length[DeleteDuplicates[a]]
会成功的根据您将要执行的其他操作,可以使用
Union
Tally
代替
DeleteDuplicates
。     ,        
CountDistinct[a]
也可以解决问题,这是Mathematica 10.0中引入的功能,等效于
Length[DeleteDuplicates[a]]
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。