在没有repmat MATLAB的情况下多次重复矢量

时间:2017-02-05 00:14:43

标签: arrays matlab

我有一个列大小非常大的矢量,我想多次重复这个矢量。适用于小型数组的简单方法是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)));

1 个答案:

答案 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.

因此,您基本上需要减少正在处理的数据量。

此外,我应该注意,图表将保留对数据的引用,因此即使您尝试绘制“以块为单位”,那么您仍然会遇到同样的问题。因此,您从根本上需要减少正在处理的数据量。