MATLAB - 大型数组的问题

时间:2015-06-02 16:20:53

标签: arrays matlab vector

以下代码适用于小型矢量。

[X1, X2]=meshgrid(Data1(:,1), Data2(:,1));
[Y1, Y2]=meshgrid(Data1(:,2), Data2(:,2));
[Z1, Z2]=meshgrid(Data1(:,3), Data2(:,3));

Rxy = sqrt( (X1-X2).^2 + (Y1-Y2).^2 );
Rz = abs( Z1-Z2 );

[I1, I2] =find( Rxy<=100 & Rz<=0.2);

但是,当我处理大量数据时,matlab不支持并且无法正常工作。 Matlab生成以下消息:

  

使用repmat时出错请求的75027x68517(38.3GB)数组超出   最大数组大小首选项。创建大于此的数组   限制可能需要很长时间并导致MATLAB无响应。   有关详细信息,请参阅数组大小限制或首选项面板。

寻找&#34;内存不足错误的替代方案,&#34;但我没有得到有效的方式。我做了一个循环功能,但它非常慢。

1 个答案:

答案 0 :(得分:0)

据推测,meshgrid正在内部使用repmat来创建一些大型矩阵。看看bsxfun,允许这些类型的操作而不实际复制数据。来自帮助:

  

C = bsxfun(fun,A,B)应用逐元素二元运算   由函数句柄指定的有趣的数组A和B,单例   启用扩展。

因此,您的示例的第5行将成为(未经测试,现在没有Matlab可用:

Rxy = sqrt( bsxfun(@minus, Data1(:,1), Data2(:,1)).^2 + bsxfun(@minus, Data1(:,2), Data2(:,2)).^2 );

并类似地更改下面一行。