我有一个名为"输出"的单元阵列(2 x 6),行#1中的每个单元{1 - > 6,2}包含1024 x 1024 x 100矩阵。我想将movmedian应用于第1行中的每个单元格。我想在维度= 3中应用此函数,窗口大小= 5。
output = cellfun(@movmedian(5,3), output,'uniform', 0);
这是我到目前为止所提出的代码,然而,它产生了一个"无价值或意外的括号或括号"错误。我不确定是什么导致了这个错误。我也有些不确定如何指示matlab仅在单元阵列的第1行执行此操作,请帮忙!
感谢您的时间!!
答案 0 :(得分:2)
作为function handle的第一个参数传递的cellfun
将顺序传递每个单元格的内容(即每个3-D矩阵)。由于您还需要传递movmedian
所需的其他参数,因此您应该创建一个anonymous function,如下所示:
@(m) movmedian(m, 5, 3)
输入参数m
是3-D矩阵。如果您要将其应用于output
的第一行,则必须index the cell array这样:
output(1, :)
这将返回包含第一行output
的单元格数组,其中:
表示“所有列”。如果您希望将修改后的矩阵存储在output
的相同单元格中,则可以在赋值中使用相同的索引。
总而言之,这就是解决方案:
output(1, :) = cellfun(@(m) movmedian(m, 5, 3), output(1, :),...
'UniformOutput', false);
...以及避免必须指定'UniformOutput', false
的一个小技巧是将匿名函数的结果封装在单元格数组中:
output(1, :) = cellfun(@(m) {movmedian(m, 5, 3)}, output(1, :));