以下代码适用于小型矢量。
[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;但我没有得到有效的方式。我做了一个循环功能,但它非常慢。
答案 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 );
并类似地更改下面一行。