Для списка из отсортированных числовых массивов неравных длин (скажем, M0
, M1
, M2
) я хочу узнать, сколько элементов каждого из этих Массивы находятся внутри диапазонов номеров, которые задаются соседними парами массива (скажем, zbin
. zbin
равен , не отсортирован , и указанные диапазоны номеров похожи на следующие [z[0], z[1]]
, [z[2], z[3]]
, [z[4], z[5]]
и т. Д. zbin
всегда имеет четное количество элементов.) несортированная природа из zbin
и рассмотрение смежных пар для в zbin
для Нахождение диапазонов чисел делает этот вопрос отличным от заданного здесь Количество элементов числовых массивов внутри определенных корзин . В указанной ссылке 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
имеет 1 элемент в рассматриваемом диапазоне номеров [5.0, 5.2]
, M1
имеет 1 element и M2
имеет 0 элементов. Во второй и третьей строках показаны результаты для последующих диапазонов чисел, т.е. [5.1, 5.3]
и [5.2, 5.4]
.)
Я хочу знать, какой самый быстрый способ достичь желаемой функциональности (zarr
). В моей реальной задаче я буду иметь дело с zbin
гораздо большего размера и многими другими массивами (M
). Я буду очень признателен за любую помощь.