1

Pythonでネストされた行列を作成できるかどうか疑問に思いました。ここでマトリックスを定義しますA

  A = array([[ 12.,   0.],[  0.,   4.]])

ゼロを一般的な2x2行列に置き換えてから、すべてを。でプロットしたいと思いますimshow()。それは可能ですか?

ネストされた行列をこのように定義してみました

  A = array([[ 12.,   array([[ 1.,   1.],[  1.,   1.]])],[  0.,   4.]])

しかし、私はこのエラーメッセージを受け取りました

ValueError:シーケンスを使用して配列要素を設定します。

4

2 に答える 2

2
>>> M = NP.empty((5, 5), dtype=NP.object)     # a 2D NumPy array
>>> M
  array([[None, None, None, None, None],
         [None, None, None, None, None],
         [None, None, None, None, None],
         [None, None, None, None, None],
         [None, None, None, None, None]], dtype=object)

これで、 ValueErrorを取得せずにシーケンスを挿入できます

>>> M[2,2] = NP.array([4, 3, 5])
>>> M
  array([[None, None, None, None, None],
         [None, None, None, None, None],
         [None, None, [4 3 5], None, None],
         [None, None, None, None, None],
         [None, None, None, None, None]], dtype=object)

>>> M[2,2]
   array([4, 3, 5])

OPの他の部分(このような配列をMatplotlibのimshowに渡す)は問題です。

imshowは、2D配列を、x、yインデックスに従ってキャンバス上に配置された点群として視覚的に表します。そのインデックスの値は、色を配列値にマップするカラーマップに基づいて、さまざまな色と色の強度に従って示されます。したがって、 imshowのデータパラメータ

  • NumPy2Dアレイ

imshowが次のように解釈できる2つ(およびこれら2つのAFAIKのみ)の高次元のNumPy配列

  • rgbタプルのNumPy2D配列(x、y、r、b、g)

  • NumPy 6D配列。これは、rgbaタプル(x、y、r、g、b、a)の2D配列として解釈されます。

于 2012-05-13T11:48:24.630 に答える
0

numpy配列にはデータ型があります。最初の行で、次のように作成Aします。

import numpy as np
A = np.array([[ 12.,   0.],[  0.,   4.]])
A.dtype

印刷しますdtype('float64')。これが、このような配列内に配置したいすべてのものであり、floatとして解釈できる必要があります。

Aの2回目の作成では、これがおそらく問題です。代わりに行う場合:

A = np.array([[ 12.,   np.array([[ 1.,   1.],[  1.,   1.]])],[  0.,   4.]], dtype=np.object)

作成されますAが、2x2の形をしていることに注意してください。また、配列はすべての次元で通常のサイズである必要があることも理解しておく必要があります(配列に穴を開けることはできません)。つまり、配列内の各位置は単一のオブジェクトとして扱われます(そのうちのいくつかはたまたま配列自体です)。

imshow数値として解釈できる要素を含む2D配列が必要でありA[0,1]、たとえば、サイズが2x2の配列自体であるため、これはまだ表示されません。数字として解釈することはできません。

matplotlib.pyplot.imshowしたがって、配列Aを画像として表示し、その構造にデータをどのように取り込むかを理解する場合は、2Dのfloat配列になるように配列Aを設計する必要があります。

于 2012-05-13T11:39:09.267 に答える