1

upper_boundマトリックス A (319 行 × 26 列) と、 (319,1) と (319,1)を表す 2 つのベクトルがありlower_boundます。

私の目標は、これらの制限を通過するポイントが少なくとも 1 つある場合に特定のデータ セットを除外するために、26 個の曲線のセット (各曲線の 319 ポイント) の中にupper_bound/曲線よりも大きいまたは小さい点があるかどうかを確認することです。lower_bound

Shai の提案に感謝します。

>> inBounds = bsxfun(@ge, A, lowerBound) & bsxfun(@le, A, upperBound);   

find&を使用して、すべてのインデックスをaccumarray含むセル配列を取得しました。p

ここで、これらの特定のインデックスを参照する tすべての元の値を持つ別のセル配列を取得したいと思います。A

サイクルでやりましたforが、時間がかかりすぎます。もっと速い方法はありますか?

ループは次のとおりです。

for gg=1:rows 
    h = genvarname('purge_value', who); 
    eval([h ' = A(gg,p{gg})']); 
end
4

1 に答える 1

1

サンプル コードが何をするか分からないので、次の 3 つのうちの 1 つが必要だと思います。


あなたの説明から、私はそれが単純にこれであると思います:

A(:,inBounds);

これにより、すべての値が範囲内にあるシリーズのみが保持されます。


p代わりに、保持したい A のすべての値の (論理) インデックス(シリーズではなく単一の値) がある場合は、残りの値をどうするかを決定する必要があります。

プロットの目的で、次のようなことを検討できます。

A(~p) = NaN;

ただし、セル配列に入れたい場合は、次のように続けることを検討できます。

myArray = cell();
for c = size(A,2):-1:1
 myArray{c} = A(isfinite(A(:,c)),c);
end
于 2013-09-11T16:44:48.240 に答える