最初に、Googleとサイトで検索している私の質問(かなり基本的だと思う)に対する回答を見つけようとしましたが、何も見つかりませんでした。
派手な行列から行を取得しようとしていますが、できません。たとえば、私がこれを使用する場合:
_result = numpy.matrix([[11, 12, 13],
[21, 22, 23],
[31, 32, 33]])
for p in result:
print(p[0])
_
これを印刷します:
_[[11 12 13]]
[[21 22 23]]
[[31 32 33]]
_
p
だけを使用しても同じです
すべての行にアクセスするにはどうすればよいですか? numpy.nditer(result)
は配列を出力します。いくつかの操作を実行するには、すべての行が必要です。
問題は、np.matrix
を使用していることです。代わりにnp.array
を使用し、インデックスを作成せずに単に繰り返します。
result = np.array([[11, 12, 13],
[21, 22, 23],
[31, 32, 33]])
for p in result:
print(p)
[11 12 13]
[21 22 23]
[31 32 33]
説明
あなたが見ているのは、それぞれのrowが2つの次元を持つことを要求するnumpy.matrix
の効果です。これは不要で、NumPyのアンチパターンです。
numpy.matrix
の背景には歴史があります。これは、行列乗算演算子の便宜のために最初に使用されました。しかし、ネストされたdot
呼び出しの代わりに@
を使用できるため(Python 3.5以降)、これは問題ではなくなりました。したがって、デフォルトではnumpy.array
を使用します。
2つの方法があります(どちらも基本的に同じロジックに要約されます)
_result.A
_ を使用します
self
をndarray
オブジェクトとして返します。np.asarray(self)
と同等です。
_In [16]: for row in result.A:
...: print(row)
...:
[11 12 13]
[21 22 23]
[31 32 33]
_
result.getA()
を使用します
self
をndarray
オブジェクトとして返します。np.asarray(self)
と同等です。
_In [17]: for row in result.getA():
...: print(row)
...:
[11 12 13]
[21 22 23]
[31 32 33]
_
以下を試してください:
for p in result:
print(numpy.array(p)[0])
これにより、各行がnumpy.ndarray
。