我想在维度A
的Matlab中创建一个多维数组NxMxG
,N,M,G
非常大(例如10^6
)。
然后我需要在循环中访问A
for g=1:G
Atemp=A(:,:,g);
%etc etc
end
在多维数组或单元数组中存储A
的值时,在速度和内存方面更方便吗?
答案 0 :(得分:1)
Atemp=A{g};
只是复制稀疏矩阵。Atemp=A(g);
。请注意,文本加载比加载二进制文件花费的时间要长得多:所以请仔细选择文件格式!答案 1 :(得分:0)
如果使用数字,则使用多维数组是正确的。单元阵列也允许其他类型,因此不仅仅针对数字进行优化。因为您使用的是非常大的数组,所以sparse matrix可能适合您。
答案 2 :(得分:0)
首先,请注意,两个选项都不允许您处理10 ^ 18个值。你不会有exabytes的存储空间,更不用说内存了。
如果你只使用Atemp = A(:,:,g);
作为Atemp = squeeze(A(:,g,:));
,对于所有g,N和M的大小始终相同,对于多维或单元格而言,就性能而言,不应该改变任何有意义的东西。 N-D可能会快一点,但没什么重要的。
显然,如果您想要根据g进行不同大小的N,M的计算,则需要选择单元阵列。如果你想用A(:,:,g)
进行计算,那么N-D数组就是明确的选择。
因此,选择最有可能取决于您是否愿意执行A{g};
或A(:,:,g)
,这取决于您的数据含义。假如你有天气数据并且目前只关心在特定高度发生的事情(不是层之间发生的事情),read -p
显然更明智。您可能需要在某个时刻进行层间计算。但是,如果您有g意味着不同的测量站点收集数据,则应使用A {g}来选择站点。最终你可能会有一些网站变大或变小。