我有一个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。第二句话是错误,正确,错误。第三个是,否,错。
我该如何实现? 谢谢!
答案 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)