【发布时间】:2019-05-23 00:19:18
【问题描述】:
我有一个 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 组成的矩阵。第二个说假,真,假。第三个对,错,错。
我如何实现这一目标? 谢谢!
【问题讨论】:
我有一个 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 组成的矩阵。第二个说假,真,假。第三个对,错,错。
我如何实现这一目标? 谢谢!
【问题讨论】:
或者,您可以使用np.apply_along_axis 将矩阵中的每一行与给定向量匹配
>>> 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)
【讨论】:
你可以考虑使用np.equal column-wise:
np.array([np.equal(col, v) for col in M.T]).T
它按元素比较两个 numpy 数组的元素。 M.T 使 for 循环将您的原始 M 列弹出为一维数组,并且需要最终的转置来反转它。
Here 描述了 equal/not_equal 函数。
【讨论】:
使用广播比较:
>>> M == v[:, None]
array([[ True, False, True],
[ True, True, False],
[ True, False, False]])
【讨论】: