为了账号安全,请及时绑定邮箱和手机立即绑定

Python v / s MATLAB中的Repmat

Python v / s MATLAB中的Repmat

慕斯王 2021-04-01 13:10:23
对于给定的矩阵,我要从该行中减去每一行的最大值。在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]


查看完整回答
反对 回复 2021-04-09
  • 1 回答
  • 0 关注
  • 327 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号