对于长度不等的排序的numpy数组的列表(例如M0
,M1
,M2
),我想找出这些数组中每个数组的多少元素在数组的相邻对(例如zbin
)给出的数字范围内。zbin
未排序,所述数字范围如下[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]
)表示M0
在所考虑的数字范围[5.0, 5.2]
中具有1元素,M1
具有1元素,M2
具有0元素。第二行和第三行显示后续数字范围的结果,即[5.1, 5.3]
和[5.2, 5.4]
。)
我想知道实现这个功能的最快方法是什么(zarr
)。在我的实际任务中,我将处理更大的zbin
和更多的数组(M
)。我将非常感谢任何帮助。你知道吗
不确定numpy真的能让你提速,但这里有一个尝试:
顺便说一句,如果你能利用数组的排序特性,那么来自链接问题的@Divakar解决方案肯定会更快。你知道吗
相关问题 更多 >
编程相关推荐