NumPy では、 1 次元配列は、形状 (R, 1) (数値のリスト) として、または形状としての 2 つの方法で表現できます。 (R,) (リストのリスト)。これらの形状は両方とも同じ基礎データを表しますが、行列の乗算では異なる意味を持ちます。
2 つの行列を乗算する場合、それらの形状には互換性がなければなりません。一方の行列の形状が (R, 1) で、もう一方の行列の形状が (R,) である場合、形状が揃っていないため、NumPy はエラーを発生します。これは、(R, 1) が 2 次元の形状であるのに対し、(R,) は 1 次元の形状であるためです。
このエラーを修正するには、行列の 1 つを明示的に再形成できます。例:
import numpy as np M = np.array([[1, 2, 3], [4, 5, 6]]) ones = np.ones((M.shape[0], 1)) result = np.dot(M[:,0].reshape((M.shape[0], 1)), ones)
この例では、reshape() メソッドを使用して、M の最初の列 (形状 (R,)) を形状 (R, 1) に再形成します。これにより、2 つの行列の形状に互換性があり、乗算を正常に実行できます。
import numpy as np M = np.array([[1, 2, 3], [4, 5, 6]]) ones = np.ones((M.shape[0], 1)) result = np.dot(M[:,0], ones) + M[:,1:]
この例では、sum() メソッドを使用して、M の最初の列と残りの列を合計します。これにより、M と同じ形状の行列が得られます。その後、エラーなしで乗算を実行できます。
import numpy as np M = np.array([[1, 2, 3], [4, 5, 6]]) ones = np.ones((M.shape[0], 1)) result = np.dot( np.broadcast_to(M[:,0], M.shape), ones)
以上がNumPy の (R, 1) と (R,) の形状の違いは何ですか? 行列の乗算の問題はどのように解決できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。