对于给定的矩阵,我要从该行中减去每一行的最大值。在MATLAB中,我会做类似的事情Xm = X - repmat(max(X,[],2), 1, size(X,2));对于Python,我一直在玩各种Xm = X - np.matlib.repmat(np.max(X,axis = 1), 1, len(X[0])) 但无济于事!我到底在哪里错过了?非常感谢。
1 回答

江户川乱折腾
TA贡献1851条经验 获得超5个赞
在Python / NumPy中,无需显式复制数组以使其与另一个数组匹配。大小为1的尺寸(单个尺寸)会在它们称为“广播”的过程中自动扩展。
例如,给定
X = np.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])
你可以写
X - np.max(X, axis=0)
由返回的数组np.max
的形状为(5,)
,与X
((3, 5)
)的形状兼容。NumPy对齐从最后一个维度开始的形状,如果一个数组比另一个数组少,则在前面填充单例尺寸。
但是,此过程有时需要一点帮助。因为np.max
返回的数组的维数小于输入的数组,所以广播通常不能这样做。匹配这些数组。例如,X - np.max(X, axis=1)
不起作用。
最好的解决方案是将keepdims
参数用于np.max
:
X - np.max(X, axis=1, keepdims=True)
另一种选择是np.newaxis
在索引中使用添加单例尺寸:
X - np.max(X, axis=1)[:, np.newaxis]
添加回答
举报
0/150
提交
取消