【问题标题】:Compare columns of numpy matrix with array将numpy矩阵的列与数组进行比较
【发布时间】: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 组成的矩阵。第二个说假,真,假。第三个对,错,错。

我如何实现这一目标? 谢谢!

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    或者,您可以使用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)
    

    【讨论】:

      【解决方案2】:

      你可以考虑使用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 函数。

      【讨论】:

        【解决方案3】:

        使用广播比较:

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

        【讨论】:

        • 不,现在可以了
        猜你喜欢
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 2014-12-12
        • 2014-07-14
        • 1970-01-01
        • 2019-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多