2016-12-14 7 views
0

私は0/1の値の行列magnitudeと別の行列edgelsを持っています。どちらも450x450のダブルです。私はの値に対応するedgelsのセルだけをmagnitudeに残し、残りはゼロにしたいと思います。私は、次の操作をしようとしています:マトリックスのサイズが異なるのはなぜですか?

edgels(magnitude==1)=edgels; 

私はエラーが取得しています:彼らは同じサイズでないのはなぜ

In an assignment A(:) = B, the number of elements in A and B must be the same.

  • を?
  • これを行うにはどのような方法が最適ですか?
+0

1以外の残りの値はどうなりますか?これらはどのように設定すべきですか? 'magnitude == 1'は0/1のバイナリマスクを与え、論理インデックスによって' magnitude == 1'の非ゼロ値の総数はあなたの要素の総数と一致する必要がありますedgelsに割り当てられていますが、そうではありません。 – rayryeng

+0

@rayryeng申し訳ありません。編集を参照してください。 – havakok

+0

'edgels(大きさ== 1)'は '1'に等しいエントリーの' numel'を持ち、 'edgels'は完全なマトリックスです。 – TroyHaskin

答えて

2

magnitude == 1はあなたに0/1のバイナリマスクを与え、論理的なインデックスによって、magnitude == 1内の非ゼロ値の合計数はedgelsにあなたが代入されている要素の合計数と一致する必要がありますので、あなたは、そのエラーを取得していますそうではありません。

あなたが求めるものを行うための最も簡単な方法は、大きさがない 1、または0である、あなたならば、ただし0

edgels(magnitude == 0) = 0; 

にそれらの値を設定する場所edgelsのすべての値を見つけることであろうあなたのロジックと一緒に行きたい、あなたが最初の出力に対応する位置でmagnitude == 1位置を変更し、その後、ゼロ行列を作成します。

out = zeros(size(edgels)); 
out(magnitude == 1) = edgels(magnitude == 1); 

テイク左の通知と、右手のide。コピーする必要がある要素の総数は同じです。

out = edgels .* double(magnitude); 

注:

私が提供できる別の方法としては、単純にmagnitudeedgels要素単位magnitudeにおけるいくつかの要素が0に等しく、そうでない場合はそのままであれば乗算は0の結果が得られ乗算することです乗算を有効にするには、magnitudeedgelsと同じ型にキャストする必要があります。そうしないと、MATLABはさまざまな型の行列を掛けることについてエラーを返します。

関連する問題