我想将一组不同的稀疏矩阵存储到一个矩阵中,如下所示:
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()命令,但我不确定这是否是最好的(最快)方式。
有什么想法吗?
答案 0 :(得分:2)
简单地说,你不能在MATLAB中创建N维稀疏数组,它们必须是二维矩阵。
此外,支持的类型只有double
或logical
(尽管有hacks来创建single
稀疏矩阵,但它们最终对任何实际都无用使用)。
如果要存储多个稀疏矩阵,则必须使用容器类型(如单元格数组或结构)。
Rant :声称细胞阵列很慢是没有根据的。如果你循环遍历arr(:,:,i)
或arr{i}
,除非目标是首先对整个ND阵列执行矢量化操作(稀疏数组不支持),否则它并不重要。所以只需将单元数组视为一个指针数组,而arr{i}
只是取消引用指针以获取另一个数组...