PDA

查看完整版本 : 遍历矩阵列的最佳方法是什么?


poster
2019-12-07, 23:17
我想使用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。

如果需要,可以稍微泛化函数,使其能够遍历最终维甚至任意维(不仅限于列)。