假设我有一个维度为NxMxR的数组stack
。我想在给定维度上使用逻辑索引来更新其值,而不使用临时变量。
使用临时变量的示例:
for k=1:R
temp=stack(:,:,k);
temp(temp<max(max(temp))/2)=NaN;
cropped(:,:,k)=temp;
end
请注意,如果整个数组的条件相同,则它将是微不足道的,但它会沿R
维度变化。如果我只想用以下语法减去阈值,bsxfun
是合适的。
cropped = bsxfun(@minus, stack, max(max(stack, [], 3))/2);
我发现使用临时变量笨拙并且无法找到定义bsxfun
函数的正确方法来执行循环所做的事情。
有人有建议吗?
答案 0 :(得分:2)
stack(bsxfun(@minus, stack, max(max(stack))/2) < 0) = NaN;
答案 1 :(得分:2)
另一个bsxfun
实施 -
t1 = reshape(stack,size(stack,1)*size(stack,2),[])
t1(bsxfun(@lt,t1,max(t1)/2))=NaN
cropped = reshape(t1,size(stack))
再一次 -
t1 = max(reshape(stack,size(stack,1)*size(stack,2),[]))
stack(bsxfun(@lt,stack,permute(t1/2,[3 1 2])))=NaN
更接近Luis's answer -
stack(bsxfun(@lt,stack,max(max(stack)/2)))=NaN