matlab - 我可以在 Matlab 中存储的矩阵的最大长度是多少
问题描述
我正在尝试存储一个 size 的矩阵4 x 10^6
,但是 Matlab 在运行它时无法做到这一点,就像它无法存储具有该大小的矩阵一样,或者我应该使用另一种方式来存储。代码如下:
matrix = [];
for j = 1 : 10^6
x = randn(4,1);
matrix = [matrix x];
end
它仍然运行很长时间并且无法完成的问题,但是当我删除该行时matrix = [matrix x];
,它会很快完成循环。所以我需要的是拥有matrix
in 文件,以便我可以在需要的任何地方使用它。
解决方案
它取决于您的可用 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
因此,只有当您的可用 RAM 少于 32MB 时,您才能存储它。
您的代码需要这么长时间的原因是因为您将矩阵扩展到位。线上的橙色摆动matrix = [matrix x];
并不是因为节日快到了,而是因为这样做是非常糟糕的做法。正如警告告诉你的那样:预先分配你的矩阵。你知道它会有多大,所以只需初始化它matrix = zeros(4,1e6);
而不是增长它。
当然在这种情况下你可以简单地做matrix = rand(4,1e6)
,这甚至比循环更快。
有关预分配的更多信息,请参阅官方 MATLAB 文档、this question(我已回答)或this one。
推荐阅读
- json - 使用 JSON 创建节点之间的链接/关系时未定义变量
- xslt-1.0 - 如何修复“字符串未被识别为有效的日期时间。” BizTalk 测试地图中的错误?
- python - 如何使用 SQLalchemy 将 CSV 加载到数据库中?
- sql - 如何在更高级别聚合加权平均值字段?
- python - 触摸屏滚动 Tkinter Python
- java - 无法使用 Apache cxf soap 通过代理隧道
- angular - 如何在 html 属性中使用 Angular 指令
- html - 自动填充表单不适用于所有浏览器
- vue.js - 在 v-for 中使用 v-if(带有计算属性)
- angular - `this.appInits[i] is not a function`错误出现在`APP_INITIALIZER`上