0

というコマンドがあることを知りました。

    A(:, find(sum(abs(A)) == 1)) = []

そして、合計された列が1に等しいことを見つけてから、それらを削除します。行に2と-1が含まれている場合、その行が削除されるため、これは私が探しているものではありません。しかし、すべてゼロと 1 を含む列を見つけようとすると、コマンドはその 1 をゼロに設定します。

どんな助けでも大歓迎です。

例: ゼロの列

    [1 2 3
     0 3 2
     0 1 2]

最初の列をゼロの列に変更したい

4

4 に答える 4

1

これを試して:

sum(a)==1 & sum(a==1) & ~sum(a>1) & ~sum(a<0)

最初のステートメントは、列の合計が 1
の場合に true になります。2 番目のステートメントは、少なくとも 1
がある場合に true になります。3 番目のステートメントは、1 より大きい数値がない場合にtrue になります。4 番目のステートメントは
、0 未満の数値がない場合に true になります。

つまり、足し合わせると 1 になる 1 と 0 だけです。

最終結果は 1 と 0 のベクトルになります (1==真、0=偽)

列の単一の 1 を 0 に変更するには、次のようにします。

a(:,sum(a)==1 & sum(a==1) & ~sum(a>1) & ~sum(a<0))=0
于 2013-10-31T19:43:15.750 に答える
0

あなたはほとんどそこにいます。0を使用して削除する代わりに割り当てる必要がありました[]

A(:, find(sum(abs(A)) == 1)) = 0
于 2013-10-31T20:06:21.653 に答える
0

より簡単な式は次のようになります。

A(:, sum(A==1)==1 & sum(abs(A))==1) = 0;

説明:

A==1           - returns a boolean array with 1's where A==1, 0's everywhere else
sum(A==1)      - sums over the first dimension of the boolean array: will ==1 where there is exactly one 1
sum(abs(A))    - when there is exactly one 1, this sum will ==1 only if the rest are zero
于 2013-10-31T20:59:58.697 に答える
0

これらの 2 つの条件をマージする必要があります。

idx = find ((sum(a==1)==1));
idx2 = find ((sum(abs(a)) == 1));

最初のものは、唯一の数字「1」の列を検索します。そして、絶対合計が 1 しかない列の 2 回目の検索では、 2,-1,-1,1 で問題ありません。

于 2013-10-31T20:00:29.997 に答える