2016-11-14 14 views
0

は私のfuctionです:はTypeError 'タイプ' オブジェクトが属性を持っていない以下の '__getitem__' 3Dプロットを描く

def draw3D(draw_tick, matrixArray): 
    print "Drawing tick = %d\n" % draw_tick 
    matrix = matrixArray[draw_tick - 450] 
    fig = plt.figure() 
    ax = fig.gca(projection='3d') 
    X = np.arange(-40, 40, 1) 
    Y = np.arange(-40, 40, 1) 
    X, Y = np.meshgrid(X, Y) 
    Z = np.matrix[Y+40][X+40] 
    surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1,cmap=cm.coolwarm,linewidth=0, antialiased=False) 
    ax.set_zlim(-1.01, 1.01) 

    ax.zaxis.set_major_locator(LinearLocator(10)) 
    ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) 

    fig.colorbar(surf, shrink=0.5, aspect=5) 

    plt.show() 
    plt.close() 

私は変数x、y、zと3Dプロットを描きたいです。

TypeError: 'type' object has no attribute '__getitem__' 

Zの行にこのエラーポイント:

Z = np.matrix[Y+40][X+40] 

私は(行列の)その時点の値を格納したいZ

に誰も私がそれを解決するために助けることができますか?

ありがとうございました!

私の質問の更新: 私は81 * 81の何百もの行列を含むmatrixArrayを持っています。 私はその配列に1つの行列のプロットを描きたいと思います。 だから私は:

matrix= matrixArray[draw_tick - 450] 

を特定すると宣言しました。次に、マトリックスの位置をX & Yとし、その位置の値をZとしたいと思います。しかし、私のXとYを-40から+40にしたいので、2軸に40を追加します。

+1

'np.matrix'は、あなたがインデックスできない型オブジェクトです。何をしようとしていますか? –

+0

私はZにその点の値を与えたいだけです。だから私はどうやって? –

+0

'np.matrix'の代わりに' matrix'を使用しましたか? –

答えて

0

numpy.matrixはクラスです(そしてPythonのクラスはtypeのインスタンスであるオブジェクトです)、ネストされた配列のようにアクセスしようとしています。おそらく、代わりにmatrixの値が必要です。

+0

numpy.matrixは実際にはクラスであり、関数ではありません –

0

ヘルプ(np.matrix)を呼び出すから、我々が得る:

| Examples 
| -------- 
| >>> a = np.matrix('1 2; 3 4') 
| >>> print a 
| [[1 2] 
| [3 4]] 
| 
| >>> np.matrix([[1, 2], [3, 4]]) 
| matrix([[1, 2], 
|   [3, 4]]) 
| 

あなたは行列のインスタンスを作成する必要があります。おそらくあなたがしたい:

Z = np.matrix(YOUR_ndarray_AS_ARGUMENT) 
+0

しかし、私はZが欲しいですその特定のポイントの値。どのように行列[Y + 40] [X + 40]を格納する必要がありますか? –

関連する問題