在矩阵和向量之间执行查找并连接结果 - MATLAB

时间:2014-10-30 14:38:04

标签: vectorization matlab

我有一个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)

是不可能的

1 个答案:

答案 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使用的功能句柄。