ホームページ > バックエンド開発 > Python チュートリアル > NumPy の (R, 1) と (R,) の形状の違いは何ですか? 行列の乗算の問題はどのように解決できますか?

NumPy の (R, 1) と (R,) の形状の違いは何ですか? 行列の乗算の問題はどのように解決できますか?

Susan Sarandon
リリース: 2024-12-04 14:13:11
オリジナル
342 人が閲覧しました

What's the Difference Between NumPy's (R, 1) and (R,) Shapes, and How Can Matrix Multiplication Issues Be Resolved?

NumPy の (R, 1) と (R,) の形状の違いは何ですか?

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:]
ログイン後にコピー
はい、明示的に再形成せずに上記の例を実行するより良い方法があります。 1 つの方法は、sum() メソッドを axis 引数とともに使用することです。例:

この例では、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)
ログイン後にコピー
明示的に形状を変更せずに上記の例を実行する別の方法は、broadcast() 関数を使用することです。例:

この例では、broadcast() 関数を使用して、M の最初の列を M の形状にブロードキャストします。これにより、2 つの行列の形状に互換性があり、乗算が可能になります。正常に実行されます。

以上がNumPy の (R, 1) と (R,) の形状の違いは何ですか? 行列の乗算の問題はどのように解決できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート