更改矩阵列的条目

时间:2018-02-13 21:59:06

标签: python numpy matrix

我有以下矩阵:

import numpy as np
A:

matrix([[ 1,  2,  3,  4],
    [ 3,  4, 10,  8]])

问题是如何输入以下限制:如果矩阵A中的任何数量的列小于或等于(< =)K(3),则更改最后一个数字该列最后一列与5之间的最小值?所以基本上,我的矩阵应该转变为:

A:

matrix([[ 1,  2,  3,  4],
    [ 3, 4, 5,  8]])

我试过这个功能:

A[-1][np.any(A <= 3, axis=0)] = np.maximum(A[-1], 5)    

但我有以下错误:

TypeError: NumPy boolean array indexing assignment requires a 0 or 1-dimensional input, input has 2 dimensions

2 个答案:

答案 0 :(得分:1)

您应该在这里使用np.minimum。相应地创建一个掩码和索引,设置值。

B = np.array(A)
m = (B <= 3).any(0)
A[-1, m] = np.minimum(A[-1, m], 5)

A

matrix([[1, 2, 3, 4],
        [3, 4, 5, 8]])

答案 1 :(得分:0)

这是一种方式:

A[-1][np.logical_and(A[-1] > 5, np.any(A <= 3, axis=0))] = 5

# matrix([[1, 2, 3, 4],
#         [3, 4, 5, 8]])

这利用了这样一个事实:如果数字大于5,你只需要更改一个数字。因此,最小标准由A[-1] > 5条件处理。