我有两个数组:
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)