N 维索引仅允许完整矩阵。 - 使用稀疏命令 MATLAB 的问题

N-dimensional indexing allowed for Full matrices only. - issue using sparse command MATLAB

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

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

但是 link 到 "bug fix" 坏了,我不知道如何处理这个问题。我知道我可以使用元胞数组,但我知道它们很慢,我正在努力避免使用它们。我想我也可以使用 full() 命令,但我不确定这是否是最好(最快)的方法。

有什么想法吗?

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

此外,支持的类型只有doublelogical(虽然有hacks可以创建single稀疏矩阵,但最终没用任何实际使用)。

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


Rant:声称元胞阵列速度慢是没有根据的。如果您在 arr(:,:,i)arr{i} 上循环并不重要,除非目标是首先对整个 ND 数组执行矢量化操作(稀疏数组不支持)。因此,只需将元胞数组视为指针数组,arr{i} 只是取消引用指针以转到另一个数组...