我有一个3D数组
a = meshgrid(2500:1000:25000,2500:1000:25000,2500:1000:25000);
通常我使用循环来执行以下逻辑
k =[];
for b = 0.01:0.01:0.2
c = find(a <= b.*0.3 & a <= b.*0.5);
if(~isempty(c))
for i=1:length(c)
k = vertcat(k,a(c(i)));
end
end
end
如何删除循环?并用一行执行上述操作
当然
b = [0.01:0.01:0.2];
c=find(a<b*.8)
是不可能的
答案 0 :(得分:1)
bsxfun
的方法为find
创建一个掩码并使用它来索引输入数组的复制版本a
以获得所需的输出 -
vals = repmat(a,[1 1 1 numel(b)]); %// replicated version of input array
mask = bsxfun(@le,a,permute(b*0.3,[1 4 3 2])) & ...
bsxfun(@le,a,permute(b*0.5,[1 4 3 2])); %// mask created
k = vals(mask); %// desired output in k
请注意,根据您使用的条件,您需要更改bsxfun
使用的功能句柄。