计算特定值范围内numpy数组中元素的频率?

问题描述 投票:0回答:3

我在这个问题上花了太长时间,我认为应该只花几分钟时间来弄清楚。我有一个名为 i 的数组,其中包含 1-21 之间的约 400 个数字。我想计算数据中每个数字 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))

这行得通,但我终生无法弄清楚如何将其限制在 1-16 之间的 i 值范围内。

有什么建议吗? :)

python list numpy counter frequency
3个回答
0
投票

您要寻找的答案取决于您是否要使用库。如果您使用的是 numpy 数组,那么

val, count = np.unique(arr, return_counts=True)

是要走的路。否则,你应该避免为每一个可能的结果调用

if
。相反,您可以使用字典来存储您的项目实例:

l = [1,2,2,3,5]
solution = {i:0 for i in range(16)}
for item in l:
    if item in solution:
        solution[item] += 1

0
投票

您可以先删除要排除的元素,然后再进行计数。

import numpy as np

i = np.arange(1, 22)

filtered_i = np.delete(i, np.where(i > 16))

unique, frequency=np.unique(filtered_i, return_counts=True)
count=np.asarray((unique, frequency))

0
投票

使用numpy.unique

import numpy as np
i = np.random.randint(1,22,400)
unique, counts = np.unique(i, return_counts=True)
ocurrences = dict(zip(unique[:16], counts[:16]))
© www.soinside.com 2019 - 2024. All rights reserved.