N维索引仅允许使用Full矩阵。 - 使用稀疏命令MATLAB发出问题

时间:2016-03-27 00:48:26

标签: matlab sparse-matrix

我想将一组不同的稀疏矩阵存储到一个矩阵中,如下所示:

A(:,:,1) = sparse([0 0 1; 0 1 0]);

A(:,:,2) = sparse([0 0 1; 0 0 0]);

A(:,:,3) = sparse([1 0 1; 0 0 0]);

A(:,:,4) = sparse([0 0 1; 0 1 0]);

但是,我收到了错误:

仅允许完整矩阵的N维索引。

似乎其他人遇到了这个问题: https://www.mathworks.com/matlabcentral/newsreader/view_thread/276098

但指向"错误修复的链接"被打破,我不知道如何处理这个问题。我知道我可以使用单元格数组,但我知道它们很慢,我试图避免它们。我想我也可以使用full()命令,但我不确定这是否是最好的(最快)方式。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

简单地说,你不能在MATLAB中创建N维稀疏数组,它们必须是二维矩阵。

此外,支持的类型只有doublelogical(尽管有hacks来创建single稀疏矩阵,但它们最终对任何实际都无用使用)。

如果要存储多个稀疏矩阵,则必须使用容器类型(如单元格数组或结构)。

Rant :声称细胞阵列很慢是没有根据的。如果你循环遍历arr(:,:,i)arr{i},除非目标是首先对整个ND阵列执行矢量化操作(稀疏数组不支持),否则它并不重要。所以只需将单元数组视为一个指针数组,而arr{i}只是取消引用指针以获取另一个数组...

相关问题