我正在尝试存储大小为// Wrap arrays in another array to get a parsable object
const coords = '[42.46329472141537,21.46498522471254],[42.463191829327116,21.4654574564449],[42.463524249310545,21.465586246917347],[42.463642970305486,21.465092550106277]';
console.log(JSON.parse(`[${coords}]`));
的矩阵,但是Matlab在运行时无法做到这一点,就像它无法存储具有该大小的矩阵,或者我应该使用另一种存储方式。代码如下:
4 x 10^6
问题仍然存在很长时间并且无法完成,但是,当我删除行matrix = [];
for j = 1 : 10^6
x = randn(4,1);
matrix = [matrix x];
end
时,它可以非常快速地完成循环。因此,我需要在文件中保存matrix = [matrix x];
,以便可以在需要的地方使用它。
答案 0 :(得分:4)
这取决于您的可用RAM量。如果像此处一样存储双精度值,则每个数字需要64位。因此,存储4M值需要4 * 10 ^ 6 * 64 = 256M位,这就是32MB RAM。
A = rand(4,1e6);
whos A
Name Size Bytes Class Attributes
A 4x1000000 32000000 double
因此,只有在可用内存少于32MB的情况下,您才能存储此文件。
代码之所以需要那么长的时间,是因为您在适当的位置扩展了矩阵。 matrix = [matrix x];
行上的橙色摆动不是因为节日快到了,而是因为这样做是非常不好的做法。正如警告告诉您的那样:预分配矩阵。您知道它将有多大,因此只需将其初始化为matrix = zeros(4,1e6);
即可,而不用增大它。
当然,在这种情况下,您可以简单地执行matrix = rand(4,1e6)
,这比循环要快。
有关预分配的更多信息,请参见the official MATLAB documentation,this question(我已回答)或this one。