0

NumPy について読んだことがありますが、それは Matrix クラスです。著者が書いたドキュメントでは、2 次元のマトリックスしか作成できないと書かれています。つまり、次のようなものしか書けないということだと思います。

input = numpy.matrix( ((1,2), (3,4))

これは正しいですか?しかし、次のようなコードを書くと:

input = numpy.matrix( ((1,2), (3,4), (4,5)) )

それも機能します...通常、私は大丈夫だと思いますが、なぜ機能するのか興味がありません。しかし、私は自分の大学の試験を書かなければならないので、それを正しく理解しているのか、それとも 2D マトリックスで別のことを意味しているのかを知る必要があります。

ご協力いただきありがとうございます

4

2 に答える 2

4

どちらも 2D 行列です。1 つ目は 2x2 2D マトリックスで、2 つ目は 3x2 2D マトリックスです。これは、プログラミングにおける 2D 配列に非常に似ています。int matrix[3][2]2 番目の行列は、たとえば C のように定義されます。

次に、3D マトリックスは、次の定義を持つことを意味しますint 3d_array[3][2][3]

numpyで、3dマトリックスでこれを試してみると:

>>> input = numpy.matrix((((2, 3), (4, 5)), ((6, 7), (8, 9))))
ValueError: matrix must be 2-dimensional
于 2015-10-27T10:32:42.320 に答える
0

エムレ。の答えは正しいですが、混乱の原因となる可能性がある numpy 行列の使用に対処したいと思います。


の使用に疑問がある場合はnumpy.matrixndarraysを選択してください:

  • Matrixは実際にはndarrayサブクラスです: マトリックスができることはすべて実行ndarrayできます (逆は正確には当てはまりません)。
  • マトリックスのオーバーライド***演算子、および aMatrixと a の間の操作は andarrayを返しますがmatrix、これは一部のアルゴリズムでは問題になります。

この SO 投稿ndarrayのvsmatrix討論の詳細、具体的にはこの短い回答


Numpy のドキュメントから

matrixオブジェクトは ndarray から継承するため、ndarray と同じ属性とメソッドを持ちます。ただし、行列オブジェクトには 6 つの重要な相違点があり、行列を使用してもそれらが配列のように動作することを期待すると、予期しない結果につながる可能性があります。

  • 行列オブジェクトは、スペースで列を区切り、セミコロン (';') で行を区切る Matlab スタイルの構文を許可する文字列表記を使用して作成できます。

  • Matrix オブジェクトは常に 2 次元です。これは、 m.ravel() がまだ 2 次元 (最初の次元に 1 がある) であり、項目選択が 2 次元オブジェクトを返すため、シーケンスの動作が配列とは根本的に異なるという点で、広範囲に影響します。

  • 行列オブジェクトは、乗算をオーバーライドして行列乗算になります。行列を受け取る可能性がある関数について、これを理解していることを確認してください。特に、m が行列の場合に asanyarray(m) が行列を返すという事実に照らして。

  • 行列オブジェクトは累乗をオーバーライドして、累乗された行列になります。asanyarray(...) を使用して配列オブジェクトを取得する関数内で power を使用することに関する同じ警告が、この事実に当てはまります。

  • 行列オブジェクトのデフォルト__array_priority__は 10.0 であるため、ndarray との混合操作は常に行列を生成します。

  • 行列には、計算を容易にする特別な属性があります。[...]

于 2015-10-27T10:54:31.550 に答える