在向量中找到连续且相同的整数

时间:2019-10-01 21:13:51

标签: python numpy

我有0和1的向量。

a = np.array([1,1,0,0])
b = np.array([1,0,0,1])
c = np.array([0 1 1 0])
d = np.array([0 1 0 1])

我想通过忽略向量的末尾,即最后一个元素与第一个元素,来实现检查向量中1是否连续的功能。预期结果将是:

check(a) --> True
check(b) --> True
check(c) --> True
check(d) --> False

简单的解决方案是滚动浏览每个向量。但是我觉得使用某些np.diff或np.nonzero组合可以更轻松,更智能。有想法吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用np.roll + np.logical_and + np.count_nonzero

import numpy as np


def check(arr):
    return np.count_nonzero(np.logical_and(np.roll(arr, 1), arr)) > 0


a = np.array([1, 1, 0, 0])
b = np.array([1, 0, 0, 1])
c = np.array([0, 1, 1, 0])
d = np.array([0, 1, 0, 1])

print(check(a))
print(check(b))
print(check(c))
print(check(d))

输出

True
True
True
False

答案 1 :(得分:0)

也许您可以尝试这样的事情,

def check(k):
    return any( i in np.diff(np.where(k==1)) for i in [1, len(k)-1])

np.where(k==1),这将返回向量为1的索引列表。

np.diff(np.where(k==1)),这将评估向量为1的相应索引之间的差异。

最后any( i in np.diff(np.where(k==1)) for i in [1, len(k)-1])将检查是否存在连续的1。它们的差是1还是向量的长度-1。