检查numpy 1d子阵列是否连续包含在numpy Nd数组中

时间:2014-06-02 16:49:48

标签: python arrays numpy

定义了1d数组(或更大数组的1d切片),如:

a=np.array([ 5, 12, 13])

如果有更高维度的数组,例如:

c1=np.array([[1, 2, 3], [ 5, 12, 13], [7, 8, 9]])
c2=np.array([[1, 2, 3], [ 5, 6, 7], [7, 8, 9]])

原来是:

a in c1, a in c2
(True, True)

我希望只有第一个条件,其中a被连续包含为子数组True。虽然a in c2会给False。 是否有任何功能可以解决这个问题?

2 个答案:

答案 0 :(得分:2)

我想,这就是你想要的:

import numpy as np

a=np.array([ 5, 12, 13])

c1=np.array([[1, 2, 3], [5,12,13], [7, 8, 9]])
c2=np.array([[1, 2, 3], [5,6,7], [7, 8, 9]])

print any((a == x).all() for x in c1)
print any((a == x).all() for x in c2)

输出:

True
False

编辑:正如moarningsun所建议的,这里是一个更好的版本:

import numpy as np

a=np.array([ 5, 12, 13])

c1=np.array([[1, 2, 3], [5,12,13], [7, 8, 9]])
c2=np.array([[1, 2, 3], [5,6,7], [7, 8, 9]])

print np.any((a == c1).all(axis=1))
print np.any((a == c2).all(axis=1))

答案 1 :(得分:2)

您可以使用.tolist(),然后正常调用这些函数:

>>> a=np.array([ 5, 12, 13])
>>> c1=np.array([[1, 2, 3], [ 5, 12, 13], [7, 8, 9]])
>>> c2=np.array([[1, 2, 3], [ 5, 6, 7], [7, 8, 9]])
>>> a.tolist() in c1.tolist(), a.tolist() in c2.tolist()
(True, False)
>>>