【发布时间】:2016-06-26 02:56:01
【问题描述】:
我遇到了一个与元胞数组相关的问题。我有一个单元格数组 X(size-400),每个元素都是一个大小为 (1x100) 的矩阵。我想得到平均矩阵,以便得到 1x100 的结果。我尝试了 cellfun 和前面讨论的其他方法。我无法得到想要的结果。我可以在不将单元格数组转换为矩阵的情况下做到这一点吗?
【问题讨论】:
标签: matlab
我遇到了一个与元胞数组相关的问题。我有一个单元格数组 X(size-400),每个元素都是一个大小为 (1x100) 的矩阵。我想得到平均矩阵,以便得到 1x100 的结果。我尝试了 cellfun 和前面讨论的其他方法。我无法得到想要的结果。我可以在不将单元格数组转换为矩阵的情况下做到这一点吗?
【问题讨论】:
标签: matlab
我会这样做:将所有 1×100 向量垂直连接成一个矩阵,然后计算每列的平均值:
x = {[9 4 5 4] [5 3 6 7] [8 2 4 1]}; % example cell array of 3 vectors of size 1×4
result = mean(vertcat(x{:}), 1); % concatenate vertically. Mean of each column
在这个例子中,
result =
7.3333 3.0000 5.0000 4.0000
如果你真的想避免矩阵,你可以使用循环来累加值:
x = {[9 4 5 4] [5 3 6 7] [8 2 4 1]}; % example cell array of 3 vectors of size 1×4
result = zeros(size(x{1})); % initiallize
for k = 1:numel(x)
result = result + x{k}; % accumulate values
end
result = result / numel(x); % divide to obtain mean
【讨论】:
您是否正确使用了cellfun?
让我们举一个测试单元的例子,每个单元有 4 个元素,大小为 3
>> Cell1 = {[4 3 5 3], [1 2 3 4], [7 8 9 6]}
Cell1 =
[1x4 double] [1x4 double] [1x4 double]
使用匿名函数x,然后cellfun 取x 的每个单元格的平均值,在我们的例子中是Cell1,最后我们取结果矩阵的平均值
mean(cellfun(@(x) mean(x),Cell1))
ans =
4.5833
【讨论】: