ホームページ >バックエンド開発 >Python チュートリアル >NumPy の配列形状 (R, 1) と (R,) の違いは何ですか?

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

DDD
DDDオリジナル
2024-12-07 10:06:16349ブラウズ

What's the Difference Between NumPy Array Shapes (R, 1) and (R,)?

NumPy 配列の形状 (R, 1) と (R,) の違い

NumPy では、配列は微妙に異なる形状を持つことができます。 (R, 1) や (R,) など。これらの形状は似ているように見えますが、解釈と処理の方法に根本的な違いがあります。

1.配列構造を理解する

NumPy 配列はデータ バッファーとビューで構成されます。データ バッファーには生のデータ要素が格納され、ビューにはデータの解釈方法が記述されます。シェイプはビューの一部であり、配列に含まれる次元と要素の数を指定します。

Shapes (R, 1) および (R,)

  • (R, 1): この形状は、R 行、1 列 の配列を表します。 1 次元配列のように動作しますが、サイズ 1 の追加次元があります。
  • (R,): この形状は、R 行のみ を持つ配列を表します。追加の次元を持たない真の 1 次元配列のように動作します。

2.異なる形状の理由

NumPy は、歴史的な理由から、また特定の操作に柔軟性を提供するために、両方の形状をサポートすることを選択しました。一部の操作では、特定の形状の配列を期待または生成するため、入力形状に応じて異なる動作が発生します。

3.行列乗算の影響

例では、numpy.dot(M[:,0], numpy.ones((1, R))) の形状により問題が発生する可能性があります。 M[:,0] の形状は (R,) ですが、numpy.ones((1, R)) の形状は (1, R) であるため、位置ずれエラーが発生します。これを解決するには、M[:,0] を (R, 1).

4 に明示的に再形成します。ベスト プラクティス

(R, 1) と (R,) の間に厳密な優先順位はありませんが、配列が論理的に 1 次元であるが追加の配列が必要な場合は、一般に (R, 1) を使用することをお勧めします。特定の操作のディメンション。エラーを避けるために、使用する関数で予想される形状に注意してください。

代替アプローチ

この例では、再形成を避けるために次の代替手段を検討することもできます。

  • numpy.dot(M.T, numpy.ones((R, 1)))
  • M.sum(axis=0).reshape((R, 1))

以上がNumPy の配列形状 (R, 1) と (R,) の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。