使用Numpy统计范围内的数字
我一直在尝试写一些代码,这段代码可以把落在某个范围内的数字加起来,并把一个对应的数字添加到一个列表中。我还需要从一个累积和的范围中提取这个范围。
numbers = []
i=0
z = np.random.rand(1000)
arraypmf = np.array(pmf)
summation = np.cumsum(z)
while i < 6:
index = i-1
a = np.extract[condition, z] # I can't figure out how to write the condition.
length = len(a)
length * numbers.append(i)
2 个回答
3
这里有另一种方法可以实现(我认为)你想要做的事情:
import numpy as np
z = np.random.rand(1000)
bins = np.asarray([0, .1, .15, 1.])
# This will give the number of values in each range
counts, _ = np.histogram(z, bins)
# This will give the sum of all values in each range
sums, _ = np.histogram(z, bins, weights=z)
4
我不太确定你想要做什么,但在 numpy
中处理条件的最简单方法就是把条件应用到整个数组上,这样你就能得到一个“掩码”:
mask = (z >= 0.3) & (z < 0.6)
然后你可以使用,比如说,extract
或者 ma
,如果需要的话。不过在这种情况下,我觉得你可以直接用 True==1
和 False==0
的关系来处理,像这样:
zm = z * mask
毕竟,如果你只是想把东西加起来,0
就相当于没有,而你可以把 len
替换成 count_nonzero
。
例如:
In [588]: z=np.random.rand(10)
In [589]: z
Out[589]:
array([ 0.33335522, 0.66155206, 0.60602815, 0.05755882, 0.03596728,
0.85610536, 0.06657973, 0.43287193, 0.22596789, 0.62220608])
In [590]: mask = (z >= 0.3) & (z < 0.6)
In [591]: mask
Out[591]: array([ True, False, False, False, False, False, False, True, False, False], dtype=bool)
In [592]: z * mask
Out[592]:
array([ 0.33335522, 0. , 0. , 0. , 0. ,
0. , 0. , 0.43287193, 0. , 0. ])
In [593]: np.count_nonzero(z * mask)
Out[593]: 2
In [594]: np.extract(mask, z)
Out[594]: array([ 0.33335522, 0.43287193])
In [595]: len(np.extract(mask, z))
Out[595]: 2