2016-11-14 102 views
0

下面是我的功用:類型錯誤「類型」對象有沒有屬性「__getitem__」繪製三維積時

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三維繪圖。

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

此錯誤點到Z的線路:

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

我想這一點(矩陣)的值保存到ž

誰能幫助我解決這個問題?

非常感謝!

更新我的問題: 我有一個matrixArray包含數百個81 * 81的矩陣。 我想在該數組中繪製一個矩陣的圖。 所以我宣佈:

matrix= matrixArray[draw_tick - 450] 

決定特定的一個。然後,我想將矩陣位置設置爲X & Y,並將該位置的值設置爲Z.但是,我希望我的X和Y從-40到+40,這就是爲什麼我要將40添加到兩個座標軸。

+1

'np.matrix'是一個類型的對象,你不能索引。你想在那裏做什麼? –

+0

我只想給Z這個點的價值。那麼我該怎麼做? –

+0

你是不是想用'matrix'代替'np.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]? –

相關問題