我有一个列大小非常大的矢量,我想多次重复这个矢量。适用于小型数组的简单方法是repmat
,但我的内存不足。我使用bsxfun
但仍未成功,MATLAB给出了使用ones
的内存错误。任何想法如何做到这一点?
这是简单的代码(仅用于演示):
t=linspace(0,1000,89759)';
tt=repmat(t,1,length(t));
或使用bsxfun:
tt=bsxfun(@times,t, ones(length(t),length(t)));
答案 0 :(得分:3)
这里的问题是数据太多,它与repmat函数本身没有关系。要验证数据太多,您可以尝试使用清晰的工作空间创建具有该大小的矩阵来重现错误。在我的系统上,我收到此错误:
>> clear
>> a = ones(89759,89759)
Error using ones
Requested 89759x89759 (60.0GB) array exceeds maximum array size preference. Creation of arrays greater than
this limit may take a long time and cause MATLAB to become unresponsive. See array size limit or preference
panel for more information.
因此,您基本上需要减少正在处理的数据量。
此外,我应该注意,图表将保留对数据的引用,因此即使您尝试绘制“以块为单位”,那么您仍然会遇到同样的问题。因此,您从根本上需要减少正在处理的数据量。