比较numpy矩阵的列和数组

时间:2018-12-23 11:25:55

标签: python arrays numpy

我有一个numpy矩阵,想将每列与给定数组进行比较,例如:

M = np.array([1,2,3,3,2,1,1,3,2]).reshape((3,3)).T
v = np.array([1,2,3])

现在我想将M的每个列与v进行比较,即我想要一个矩阵,其中第一列包含True,True,True。第二句话是错误,正确,错误。第三个是,否,错。

我该如何实现? 谢谢!

3 个答案:

答案 0 :(得分:1)

使用广播比较:

>>> M == v[:, None]
array([[ True, False,  True],
       [ True,  True, False],
       [ True, False, False]])

答案 1 :(得分:0)

您可以考虑按列使用np.equal

np.array([np.equal(col, v) for col in M.T]).T

它逐元素比较两个numpy数组的元素。 M.T进行for循环以将原始M列弹出为一维数组,并且需要最后的转置来反转它。 Here描述了equal / not_equal函数。

答案 2 :(得分:0)

或者,您可以使用blog-post by Liz Rice

将矩阵中的每一行与给定向量进行匹配
>>> M
array([[1, 3, 1],
       [2, 2, 3],
       [3, 1, 2]])
>>> v
array([1, 2, 3])
>>> np.apply_along_axis(lambda x: x==v, 1, M)
array([[ True, False, False],
       [False,  True,  True],
       [False, False, False]], dtype=bool)