使用cellfun
函数可以在MATLAB中的单元格数组中为每个矩阵应用函数。例如,要确定单元阵列中每个矩阵的中位数,可以发出以下命令:
temp={[1;2;3;4;5] [6;7;8;9;10]}
cellfun(@median,temp)
ans =
3 8
如何对单元格数组的每个单元格中的矩阵的单个列应用类似的操作(例如,每个单元格中矩阵的第一列)?对于以下单元格数组,将中值函数应用于每个单元格中矩阵的第一列的所需输出为3,9
。
temp={[1 2;3 4;5 6] [7 8;9 10;11 12]}
如何编写提供此类输出的操作?最后,如何执行该操作,使得每个单元内矩阵的第N列的输出存储在输出矩阵的第N列中。例如,在上面的简化示例中,3,9
(矩阵的第一列的中间值)将存储在输出矩阵的第一列中;同样,4,10
(矩阵的第二列的中位数)将存储在输出矩阵的第二列中。为方便起见,下面显示了单元阵列(输入)和所需的中值数组(输出):
cell-1 cell-2
input = 1 2 7 8
3 4 9 10
5 6 11 12
output = 3 4
9 10
谢谢。
答案 0 :(得分:3)
你几乎就在那里,只需要重新排列结果元素。
temp = {[1 2; 3 4; 5 6] [7 8; 9 10; 11 12] [1 2; 3 4; 5 6; 7 8; 9 10]}
cell2mat(cellfun(@(m) median(m)', temp, 'UniformOutput', false))'
UniformOuptut
选项将cellfun
的输出合并为一个数组。通常median
返回一个包含每列中值的行矩阵,但是这里每个行矩阵在与其他输出组合(水平)之前进行转置。
答案 1 :(得分:2)
此代码适用于您的小例子---但我不确定如何在没有for循环的情况下自动化矩阵构造。我相信有人(也许你!)会知道更好的方式!
temp={[1 2;3 4;5 6] [7 8;9 10;11 12]}
C=cellfun(@median,temp,'UniformOutput',false)
A=[C{1}(1) C{1}(2);C{2}(1) C{2}(2)]
编辑:是的! cyang 知道更好的方法!