我在这个问题上花了太多时间,我想我应该只花几分钟就能解决这个问题。我有一个数组i,里面有大约400个1 - 21之间的数字。我想计算1 - 21中每个数字在数据中的频率。我还想将这个范围限制在1 - 16之间,并排除16以上的数字。
这就是我要做的,但是它非常笨拙,效率也很低,我觉得一定有办法可以大大缩短这个过程,我需要能够得到频率输出,并将它们放在一个名为nvals的排序数组中,我可以用它来进行后续计算。
i=bin_numDM+(bin_numF-1)*fbins
ones= 0
twos=0
threes=0
fours=0
fives=0
sixes=0
sevens=0
eights=0
nines=0
tens=0
elevens=0
twelves=0
thirteens=0
fourteens=0
fifteens=0
sixteens=0
for item in i:
if item ==1:
ones = ones + 1
if item==2:
twos=twos+1
if item==3:
threes=threes+1
if item==4:
fours=fours+1
if item==5:
fives=fives+1
if item==6:
sixes=sixes+1
if item==7:
sevens=sevens+1
if item==8:
eights=eights+1
if item==9:
nines=nines+1
if item==10:
tens=tens+1
if item==11:
elevens=elevens+1
if item==12:
twelves=twelves+1
if item==13:
thirteens=thirteens+1
if item==14:
fourteens=fourteens+1
if item==15:
fifteens=fifteens+1
if item==16:
sixteens=sixteens+1
nvals=[ones,twos,threes,fours,fives,sixes,sevens,eights,nines,tens,elevens,twelves,thirteens,fourteens,fifteens,sixteens]
我也试过:
unique, frequency=np.unique(i,return_counts=True)
count=np.asarray((unique,frequency))
这是可行的,但我一辈子都想不出如何将i值限制在1 - 16之间。
有什么建议吗?:)
4条答案
按热度按时间ewm0tg9j1#
你所寻找的答案取决于你是否想使用库。如果你使用numpy数组,那么
否则,您应该避免为每个可能的结果调用
if
。相反,您可以使用字典来存储条目示例:wko9yo5t2#
可以先删除要排除的元素,然后再进行计数。
smtd7mpg3#
使用numpy.unique:
zf9nrax14#
下面是几种等效的方法,沿着时间安排,它们都具有相同的结果表示方式:包含
{value: count}
的排序的dict
。试验:
以及: