我有53个不同的(40,000 x 2000)稀疏矩阵的单元格数组。我需要在第三维上取平均值,以便例如元素(2,5)在53个单元格间取平均值。这应该产生一个(33,000 x 2016)输出。我认为应该有一种方法可以通过cellfun()完成此操作,但是我无法编写一个在单元内索引中跨越单元的函数。Matlab对单元格上的相同索引元素的均值
1
A
回答
1
您可以从稀疏矩阵转换为非零项的指数和值,然后用sparse
自动获取稀疏形式的总和:
myCell = {sparse([0 1; 2 0]), sparse([3 0; 4 0])}; %// example
C = numel(myCell);
M = cell(1,C); %// preallocate
N = cell(1,C);
V = cell(1,C);
for c = 1:C
[m n v] = find(myCell{c}); %// rows, columns and values of nonzero entries
M{c} = m.';
N{c} = n.';
V{c} = v.';
end
result = sparse([M{:}],[N{:}],[V{:}])/C; %'// "sparse" sums over repeated indices
+0
这个和Raab70的评论都很有帮助 - 谢谢!我检查过这个,因为稀疏命令是一个很棒的技巧。 – cataclysmic
0
这应该做的伎俩,只是初始化一个空的数组和总结单元格数组的每个元素。我看不出有什么办法解决使用for循环没有串联成一个巨大的三维阵列(这将几乎可以肯定耗尽内存)
running_sum=zeros(size(cell_arr{1}))
for i=1:length(cell_arr)
running_sum=running_sum+cell_arr{i};
end
means = running_sum./length(cell_arr);
相关问题
- 1. Matlab,单元格索引
- 2. 相对单元格引用
- 3. GridView单元格的单元格索引
- 4. matlab中的单元阵列均值
- 5. 在MATLAB中查找单元格中特定值的索引
- 6. 选定的索引和单元格值
- 7. Matlab中非数字元素的索引
- 8. 获取相同索引处相同元素的数量
- 9. MATLAB:单元格对象的每元素最小操作
- 10. Matlab查找单元格元素
- 11. 如何总结单元格相应索引中的值?
- 12. JS计算二维数组中的相同元素的均值
- 13. 绘制具有相同频率的元素的平均值
- 14. MATLAB中一个单元中的相似和不相似元素
- 15. Matlab对特定元素或最后一个元素的索引变量
- 16. 来自不同列表的相同索引的元素求和
- 17. 如何访问“索引路径上行的单元格”之外的uitableview单元格元素
- 18. xsl:xml元素的平均值
- 19. VBA中单元格的平均值
- 20. 来自单独阵列的索引元素的均值和St Dev
- 21. 表格单元格上的绝对元素
- 22. 获取不同容器中相同元素类的jQuery索引
- 23. Linq:查找具有不同值但相同索引的2列表的元素
- 24. 引导的显示器内部NAV元素:表单元格元素对火狐
- 25. 搜索相邻单元格
- 26. 根据单元格引用的单元格更改单元格的值
- 27. xmlstarlet更新值相同的元素值
- 28. 找到元素中元素的索引
- 29. 对于索引路径上的行,UITableview单元格不叫
- 30. 元素索引
为什么'33000 X 2016'?使用53x40000x2000备用矩阵不是一种选择? – Daniel
@Daniel问题是Matlab不支持稀疏3D数组 –
如何从53 40000x2000矩阵得到33000x2016结果? –