我有以下矩阵:
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
答案 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
条件处理。