首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python v/s MATLAB中的Repmat

Python v/s MATLAB中的Repmat
EN

Stack Overflow用户
提问于 2018-06-21 04:43:43
回答 1查看 482关注 0票数 1

对于给定的矩阵,我从行中减去每行的最大值。在MATLAB中,我会这样做

代码语言:javascript
运行
复制
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])),但是没有用!

我到底错过了什么?非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-21 06:03:51

在Python/NumPy中,不需要显式复制一个数组以使其与另一个数组匹配。尺寸为1的尺寸(单件尺寸)为automatically expanded in a process they call "broadcasting"

例如,给定

代码语言:javascript
运行
复制
X = np.array([[1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11]])

你可以写

代码语言:javascript
运行
复制
X - np.max(X, axis=0)

np.max返回的数组的形状为(5,),与X ((3, 5))的形状兼容。NumPy从最后一个维度开始对齐形状,如果一个数组比另一个数组的维度少,则在前面填充单个维度。

然而,这个过程有时需要一点帮助。因为np.max返回的数组比输入的维数少,所以广播通常不能。匹配这些数组。例如,X - np.max(X, axis=1)不起作用。

最好的解决方案是对np.max使用keepdims参数

代码语言:javascript
运行
复制
X - np.max(X, axis=1, keepdims=True)

另一种选择是在索引中使用np.newaxis添加单例维度:

代码语言:javascript
运行
复制
X - np.max(X, axis=1)[:, np.newaxis]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50956747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档