修正方法: valueerror: オペランドをシェイプでブロードキャストできませんでした


Python の使用時に発生する可能性のあるエラーは次のとおりです。

 ValueError : operands could not be broadcast together with shapes (2,2) (2,3) 

このエラーは、Python でnumpy.dot()関数の代わりに乗算記号 ( * ) を使用して行列の乗算を実行しようとすると発生します。

次の例は、各シナリオでこのエラーを修正する方法を示しています。

エラーを再現する方法

2 行 2 列の 2×2 行列 C があるとします。

また、2 行 3 列を持つ 2×3 行列 D があるとします。

行列 C と行列 D を乗算する方法は次のとおりです。

これにより、次の行列が得られます。

次のように乗算記号 (*) を使用して、Python でこの行列の乗算を実行しようとするとします。

 import numpy as np

#define matrices
C = np. array ([7, 5, 6, 3]). reshape (2, 2)
D = np. array ([2, 1, 4, 5, 1, 2]). reshape (2, 3)

#print dies
print (C)

[[7 5]
 [6 3]]

print (D)

[[2 1 4]
 [5 1 2]]

#attempt to multiply two matrices together
CD

ValueError: operands could not be broadcast together with shapes (2,2) (2,3)  

ValueErrorを受け取ります。このエラーが発生した理由を理解するには、 NumPy のドキュメントを参照してください。

2 つの配列を操作する場合、NumPy はその形状を要素ごとに比較します。終了寸法 (つまり右端) から始まり、左に向かって進みます。 2 つの次元が互換性がある場合

  • それらは等しい、または
  • そのうちの 1 つは 1

これらの条件が満たされない場合、 ValueError: Operands Could not beBroadcast together 例外がスローされ、配列の形状に互換性がないことが示されます。

2 つの行列の最終次元の値が同じではないため (行列 C の最終次元は 2、行列 D の最終次元は 3)、エラーが発生します。

エラーを修正する方法

このエラーを修正する最も簡単な方法は、単純にnumpy.dot()関数を使用して行列の乗算を実行することです。

 import numpy as np

#define matrices
C = np. array ([7, 5, 6, 3]). reshape (2, 2)
D = np. array ([2, 1, 4, 5, 1, 2]). reshape (2, 3)

#perform matrix multiplication
C. dowry (D)

array([[39, 12, 38],
       [27, 9, 30]])

ValueErrorを回避し、両方の行列を正常に乗算できることに注意してください。

また、結果が以前に手動で計算した結果と一致していることにも注意してください。

追加リソース

次のチュートリアルでは、Python の他の一般的なエラーを修正する方法を説明します。

修正方法: 列が重なっていますが、サフィックスが指定されていません
修正方法: オブジェクト「numpy.ndarray」には「append」属性がありません
修正方法: すべてのスカラー値を使用する場合は、インデックスを渡す必要があります。
修正方法: ValueError: float NaN を int に変換できません

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です