Python v / s MATLAB中的Repmat

对于给定的矩阵,我要从该行中减去每一行的最大值。在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])) 但无济于事!

我到底在哪里错过了?非常感谢。


慕斯王
浏览 328回答 1
1回答

江户川乱折腾

在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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python