计算numpy数组python中的连续个

问题描述 投票:0回答:1

是numpy的新手。我有一个由1和0组成的2D数组,我正尝试对角扫描一定长度的连续1。一旦找到样式,函数应返回样式开始的索引,即拉伸中第一个“ 1”的位置。这是我的最佳尝试:

def find_pattern(array2D, patternlength):
ones_count = 0
pattern_location = []
diag = [array2D.diagonal(i) for i in range(array2D.shape[1]-1,-array2D.shape[0],-1)]
for index, match in np.ndenumerate(diag):
    if match == 1:
        ones_count +=1
    else:
        ones_count == 0
    if ones_count == patternlength:
        pattern_location.append(index)
return pattern_location

但是,当尝试运行时会产生ValueError:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我了解为什么会引发错误,但我不知道如何解决该错误。在我正在寻找一定范围的连续实例的情况下,any()或all()似乎不合适。

我正在寻找一种不涉及使用诸如pandas和itertools之类的额外软件包的解决方案。

谢谢!

numpy python-3.7
1个回答
0
投票

我认为您太复杂了,怎么样:

def find_pattern(array2D, patternlength):
    diag=np.diag(array2D)
    for i in range(len(diag)-patternlength-1):
        if(all(diag[i:i+patternlength]==1)):
            return i
    return -1 # if not found

样本输入:

test=np.random.choice([0,1], (12, 14))

print(test)

print(find_pattern(test,3))

返回:

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

7
© www.soinside.com 2019 - 2024. All rights reserved.