2016-12-13 4 views
4

私が試した要素ごとの除算を使用するためには、行列の次元はどうでなければなりませんか?

res = A ./ B 

res = [1 2] ./ [1 2] 
res = [1 2] ./ [1 2; 2 3] 
res = [1 2] ./ [1 2; 2 3; 3 4] 
res = [1 2; 2 3] ./ [1 2; 2 3] 

それらのすべてが動作します。

しかし、次は動作しませんので、

res = [1 2; 2 3] ./ [1 2; 2 3; 3 4] 

は、次元のルールは、実際には何ですか?

+0

[ドキュメントを読む](https://www.mathworks.com/help/matlab/ref/rdivide.html)しましたか? – excaza

+0

行列の行列分割または要素ごとの行列の分割が必要ですか?行列の除算に '/'を使用したい場合は、ドットなしで –

+0

あなたのタイトルは間違いです。私はあなたが_lelement-wise division_によって_rightを代わりに置き換えることを提案します。 –

答えて

5

これは、MATLABの新しいautomatic dimension broadcastingのおかげで混乱したものの一部です。

まず、./演算子は、要素の演算であることに注意してください。

R2016bより前のMATLABのバージョンでは、この演算子を使用すると、2つの入力が正確にはの同じ次元になる必要があります。

[1 2] ./ rand(4) 

マトリックス寸法が同意しなければなりません。

あなたは(あなたがあなたの第二の例を示すてきたように)、マトリクス状に複数の列に、この要素ごとの操作を適用したい場合は、ルールがあることであるbsxfun

bsxfun(@rdivide, [1 2], [1 2; 2 3]); 

を使用していました2つの入力の非シングルトン次元が一致しなければならない。

2つの入力配列の非単一次元は、互いに一致する必要があります。

したがって、上記の例では、最初の配列は1の第1の次元と2の第2の次元を持ちます。第2の入力は、2の第1の次元と2の第2の次元とを有するので、この基準が満たされる。

R2016bでは、MATLABはと同じ効果bsxfunとした寸法の自動ブロードキャストを導入しました。これは今やオペレータに組み込まれています。 同じ基準が第一の入力の大きさは、[2 x 2]と第二の大きさは[3 x 2]ある

[1 2; 2 3] ./ [1 2; 2 3; 3 4] 

に失敗あなたの例では動作を

を行う必要があります。この場合、最初の入力ディメンションは一致しないため、操作は失敗します。

+0

参照:[基本操作のための互換アレイのサイズ](https://www.mathworks.com/help/matlab/matlab_prog/compatible-array-sizes-for-basic-operations.html) – excaza

+1

@anonymousそれに答えるには、Sueversの素晴らしい答えを読んでください...ここに。 –

関連する問題