Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-07, 23:17   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
默认 遍历矩阵列的最佳方法是什么?

我想使用MATLAB将函数应用于矩阵中的所有列。例如,我希望能够在矩阵的每一列上调用smooth,而不是平滑地将矩阵视为向量(如果调用smooth(matrix) ,则是默认行为)。

我确定必须有一种更惯用的方法来执行此操作,但是我找不到它,因此我定义了一个map_column函数:

function result = map_column(m, func) result = m; for col = 1:size(m,2) result(:,col) = func(m(:,col)); end end 我可以打电话给:

smoothed = map_column(input, @(c) (smooth(c, 9))); 这段代码有什么问题吗?我该如何改善?

回答:
您的解决方案很好。

请注意,horizcat对大型矩阵的性能有很大的影响。它使代码为O(N ^ 2)而不是O(N)。对于100x10,000矩阵,您的实现在我的计算机上花费2.6s,horizcat在我的计算机上花费64.5s。对于100x5000矩阵,horizcat实现需要15.7s。

如果需要,可以稍微泛化函数,使其能够遍历最终维甚至任意维(不仅限于列)。
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 22:58


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.