TypeError: объект type не имеет атрибута __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.
TypeError: 'type' object has no attribute '__getitem__'
Эта ошибка указывает на линию Z:
Z = np.matrix[Y+40][X+40]
Я хочу сохранить значение этой точки (матрицы) в Z
Может кто-нибудь помочь мне решить это?
Большое спасибо!
Обновление моего вопроса: у меня есть матричный массив, содержащий сотни матриц размером 81*81. Я хочу нарисовать график одной матрицы в этом массиве. Итак, я заявил:
matrix= matrixArray[draw_tick - 450]
решить конкретный. Затем я хочу поместить матричное местоположение как X & Y, а значение местоположения - как Z. Но я хочу, чтобы мои X и Y были от -40 до +40, поэтому я добавляю 40 к двум осям.,
2 ответа
От вызова справки (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)
numpy.matrix - это класс (а классы в Python - это объекты, которые являются экземплярами type
), и вы пытаетесь получить к нему доступ, как если бы это был вложенный массив. Вы, вероятно, хотите значение в matrix
вместо.