gpt4 book ai didi

python - numpy数组有多少个元素在指定的数字范围内

转载 作者:行者123 更新时间:2023-12-01 09:26:11 24 4
gpt4 key购买 nike

对于不等长度的排序 numpy 数组列表(例如M0M1 M2)我想找出每个数组中有多少元素位于由相邻的数组对给出的数字范围内(例如zbinzbin未排序,并且所述数字范围类似于以下 [z[0], z[1]], [z[2], z[ 3]][z[4]、z[5]] 等等。zbin 的元素数量始终为偶数。)zbin 的>未排序性质以及在 zbin 中考虑相邻对来查找数字范围使得这个问题不同于有人在这里问Number of elements of numpy arrays inside specific bins 。在上述链接中,zarr排序,并且相邻元素给出了数字范围(此处相邻对给出了数字范围) .

这就是我目前正在做的事情:

""" Function to do search query """
def search(numrange, lst):
arr = np.zeros(len(lst))
for i in range(len(lst)):
probe = lst[i]
count = 0
for j in range(len(probe)):
if (probe[j]>numrange[1]): break
if (probe[j]>=numrange[0]) and (probe[j]<=numrange[1]): count = count + 1

arr[i] = count
return arr


""" Some example of sorted one-dimensional arrays of unequal lengths """
M0 = np.array([5.1, 5.4, 6.4, 6.8, 7.9])
M1 = np.array([5.2, 5.7, 8.8, 8.9, 9.1, 9.2])
M2 = np.array([6.1, 6.2, 6.5, 7.2])

""" Implementation and output """
lst = [M0, M1, M2]
zbin = np.array([5.0, 5.2, 5.1, 5.3, 5.2, 5.4])

zarr = np.zeros( (len(zbin)/2, len(lst)) )
for i in np.arange(0, len(zbin)/2, 1):
indx = i*2
print indx
numrange = [zbin[indx], zbin[indx+1]]
zarr[i,:] = search(numrange, lst)

print zarr

输出是:

[[ 1.  1.  0.]
[ 1. 1. 0.]
[ 1. 1. 0.]]

这里,zarr的第一行([1,1,0]显示M01 元素在考虑的数字范围 [5.0, 5.2] 中,M1 具有 1 元素,M2 具有 0 元素。第二行和第三行显示后续数字范围的结果, [5.1, 5.3][5.2, 5.4 ]。)

我想知道实现此所需功能的最快方法是什么 (zarr)。在我的实际任务中,我将处理更大尺寸的 zbin 和更多数组 (M)。我将非常感谢任何帮助。

最佳答案

不确定 numpy 是否真的能让你加快速度,但这是一个尝试:

lst = [M0, M1, M2]
zbin = np.array([5.0, 5.2, 5.1, 5.3, 5.2, 5.4])

zarr = np.zeros((len(zbin)//2, len(lst)), dtype=np.float)

for i,M in enumerate(lst):
zarr[:,i] = np.count_nonzero(np.logical_and(M >= zbin[::2, np.newaxis],
M <= zbin[1::2, np.newaxis]), axis=1)

In [10]: zarr
Out[10]:
array([[1., 1., 0.],
[1., 1., 0.],
[1., 1., 0.]])

顺便说一句,如果您可以利用数组的排序性质,链接问题中的@Divakar解决方案肯定会更快。

关于python - numpy数组有多少个元素在指定的数字范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50375905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com