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维稀疏数组,它们必须是二维矩阵。
此外,支持的类型只有double
或logical
(虽然有hacks可以创建single
稀疏矩阵,但最终没用任何实际使用)。
如果要存储多个稀疏矩阵,则必须使用容器类型(如元胞数组或结构)。
Rant:声称元胞阵列速度慢是没有根据的。如果您在 arr(:,:,i)
或 arr{i}
上循环并不重要,除非目标是首先对整个 ND 数组执行矢量化操作(稀疏数组不支持)。因此,只需将元胞数组视为指针数组,arr{i}
只是取消引用指针以转到另一个数组...
我想将一组不同的稀疏矩阵存储到一个矩阵中,如下所示:
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维稀疏数组,它们必须是二维矩阵。
此外,支持的类型只有double
或logical
(虽然有hacks可以创建single
稀疏矩阵,但最终没用任何实际使用)。
如果要存储多个稀疏矩阵,则必须使用容器类型(如元胞数组或结构)。
Rant:声称元胞阵列速度慢是没有根据的。如果您在 arr(:,:,i)
或 arr{i}
上循环并不重要,除非目标是首先对整个 ND 数组执行矢量化操作(稀疏数组不支持)。因此,只需将元胞数组视为指针数组,arr{i}
只是取消引用指针以转到另一个数组...