![]() |
遍历矩阵列的最佳方法是什么?
我想使用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。 如果需要,可以稍微泛化函数,使其能够遍历最终维甚至任意维(不仅限于列)。 |
所有时间均为北京时间。现在的时间是 11:00。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.