Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我想使用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。 如果需要,可以稍微泛化函数,使其能够遍历最终维甚至任意维(不仅限于列)。 |
![]() |
![]() |