检查一维numpy数组的每个元素是否在二维numpy数组的对应行中



我有两个数组:

X = np.array([[3, 4, 1], [2, 3, 4], [3, 5, 1]]) 
v = np.array([1, 5, 3])

我想检查v是否在X元素中,即1在[3,4,1]中,5在[2,3,4]中,3在[3,5,1]中,并返回1和0。所以,在这种情况下,我的答案应该是[1,0,1]。

感谢

我不太了解NumPy使用array对象,但我已经做了一个函数,将与正常列表工作:

def check_correspondence(lists, numbers):
for i in range(len(lists)):
yield int(numbers[i] in lists[i])

无论何时调用check_correspondence,都需要将其转换为列表或元组,因为它是生成器。无论如何,它可以修改为接受numpy.array

为v创建新坐标轴:

>>> np.any(X - v[:, np.newaxis] == 0, axis=1) * 1
array([1, 0, 1])

numpy.newaxis: newaxis对象可用于所有切片操作,以创建长度为1的轴。newaxis是' None '的别名,' None '可以代替它,得到相同的结果。

X = np.random.randint(100, 1000, (100000, 1000))
v = np.random.randint(100, 1000, 100000)
%timeit np.any(X - v[:, np.newaxis] == 0, axis=1) * 1
880 ms ± 110 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

最新更新