【发布时间】:2018-12-30 15:05:01
【问题描述】:
我搜索我的 ndArray 以查找基于 True 值的最长系列。有没有一个选项可以在不循环数组的情况下找到最长的系列?
我已经用 numpy.nonzero 编写了自己的解决方案,但可能有更好的解决方案。
import numpy as np
arr = np.array([[[1,2,3,4,5],
[6,7,8,9,10],
[11,12,13,14,15],
[16,17,18,19,20],
[21,22,23,24,25]],
[[True,True,True,False,True],
[True,True,True,True,False],
[True,True,False,True,True],
[True,True,True,False,True],
[True,True,True,False,True]]])
def getIndices(arr):
arr_to_search = np.nonzero(arr)
arrs = []
prev_el0 = 0
prev_el1 = -1
activ_long = []
for i in range(len(arr_to_search[0])):
if arr_to_search[0][i] == prev_el0:
if arr_to_search[1][i] != prev_el1 + 1:
arrs.append(activ_long)
activ_long = []
else:
arrs.append(activ_long)
activ_long = []
activ_long.append((arr_to_search[0][i],arr_to_search[1][i]))
prev_el0 = arr_to_search[0][i]
prev_el1 = arr_to_search[1][i]
max_len = len(max(arrs,key=len))
longest_arr_list = [a for a in arrs if len(a) == max_len]
return longest_arr_list
print(getIndices(arr[1,:,:]))
print(getIndices(arr[1,:,:].T))
[[(1, 0), (1, 1), (1, 2), (1, 3)]]
[[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)], [(1, 0), (1, 1), (1, 2), (1, 3), (1, 4)]]
【问题讨论】:
-
如果您的代码有效,可能更适合代码审查
-
find longest series based on True values是什么意思?预期的输出是什么? -
系列是指最长的子数组,其中值为 True,如下例所示: [True,True,True,False,True] [True,True,True,True,False] [True,True ,False,True,True] [True,True,True,False,True] [True,True,True,False,True] 这里,最长的系列在 col 0 和 col 1, 5 x True, False 是打破系列
标签: python numpy multidimensional-array