我想用MATLAB将函数应用于矩阵中的所有列.例如,我希望能够在矩阵的每一列上调用平滑,而不是将矩阵平滑地视为向量(如果调用则这是默认行为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)));
这段代码有什么问题吗?我怎么能改进它?
MATLAB"for"语句实际上循环遍历任何提供的列 - 通常,这只会产生一系列标量,因为传入的向量(如上例所示)是行向量.这意味着您可以像这样重写上面的代码:
function result = map_column(m, func) result = []; for m_col = m result = horzcat(result, func(m_col)); end
如果func没有返回列向量,那么你可以添加类似的东西
f = func(m_col); result = horzcat(result, f(:));
强迫它进入一个列.