Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 单元格中相同索引元素的平均值_Matlab_Cell_Sparse Matrix - Fatal编程技术网

Matlab 单元格中相同索引元素的平均值

Matlab 单元格中相同索引元素的平均值,matlab,cell,sparse-matrix,Matlab,Cell,Sparse Matrix,我有一个包含53个不同(40000 x 2000)稀疏矩阵的单元数组。我需要取第三维的平均值,例如,元素(2,5)在53个单元格中取平均值。这将产生单个(33000 x 2016)输出。我认为cellfun()应该有办法做到这一点,但我无法编写一个跨单元格的函数,该函数在单元格内索引相同的情况下工作。这应该可以做到,只需初始化一个空数组并对单元格数组的每个元素求和即可。如果不将for循环连接成一个巨大的3D阵列(几乎肯定会耗尽内存),我看不到任何方法可以使用for循环 您可以将稀疏矩阵转换为非零

我有一个包含53个不同(40000 x 2000)稀疏矩阵的单元数组。我需要取第三维的平均值,例如,元素(2,5)在53个单元格中取平均值。这将产生单个(33000 x 2016)输出。我认为cellfun()应该有办法做到这一点,但我无法编写一个跨单元格的函数,该函数在单元格内索引相同的情况下工作。

这应该可以做到,只需初始化一个空数组并对单元格数组的每个元素求和即可。如果不将for循环连接成一个巨大的3D阵列(几乎肯定会耗尽内存),我看不到任何方法可以使用for循环


您可以将稀疏矩阵转换为非零项的索引和值,然后使用
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

为什么
33000 x 2016
?使用53x40000x2000备用矩阵不是一个选项?@Daniel的问题是Matlab不支持稀疏3D阵列。如何从53 40000x2000矩阵得到33000x2016结果?好的,这是一个很好的参数:)。仍然是关于输出大小的问题。这和Raab70的评论都有帮助——谢谢!我检查了这个,因为稀疏命令是一个很好的技巧。
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