2

stack次元 NxMxRの配列があるとします。一時変数を使用せずに、特定のディメンションで論理インデックスを使用してその値を更新したいと考えています。

一時変数を使用した例:

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一時変数の使い方がぎこちなく、ループが行うことを行うための関数を定義する適切な方法を見つけることができません。

誰か提案がありますか?

4

2 に答える 2

2
stack(bsxfun(@minus, stack, max(max(stack))/2) < 0) = NaN;
于 2014-05-27T18:21:47.840 に答える