【发布时间】:2017-08-22 21:04:47
【问题描述】:
这是我正在尝试做的,创建了一个随机数组来演示:
% all IDs
all_IDS = 1:216000000;
% Array 1
X = round(1550*rand(216000000,1));
Y = round(1550*rand(216000000,1));
Z = round(90*rand(216000000,1));
% Array 2
Xsub = round(1550*rand(160000,1));
Ysub = round(1550*rand(160000,1));
Zsub = round(90*rand(160000,1));
del_val =1;
% required o/p
reqd_op = zeros(1,10);
% boolean indexing
indx =1;
for jj = 1:160000
VID_X = Xsub(jj);
VID_Y = Ysub(jj);
VID_Z = Zsub(jj);
I2 = (X>VID_X-del_val & X<VID_X+del_val)& (Y>VID_Y-del_val & Y<VID_Y+del_val) & (Z>VID_Z-del_val & Z<VID_Z+del_val);
len = numel(all_IDS(I2));
reqd_op(1,indx:indx+len-1) = all_IDS(I2);
indx=indx+len;
end
上面的代码需要很多时间,因为我正在处理一个非常大的数组,有没有办法消除 for 循环,意思是,而不是逐个元素地进行布尔索引 - 我可以为整个数组做吗一次?
【问题讨论】:
-
顺便说一句,您的循环仅在最后保留的是
jj的最后一次迭代,即I2 = (X>Xsub(160000)-del_val & X<Xsub(160000)+del_val)& (Y>Ysub(160000)-del_val & Y<Ysub(160000)+del_val) & (Z>Zsub(160000)-del_val & Z<Zsub(160000)+del_val); -
答案将取决于您的“此处未显示的进一步处理”,即您要解决的问题 Y,不一定是您选择和描述的方法 X。
-
一次做整个阵列不是需要构建一个 35GB 的阵列吗?看起来很大。