Я использую numpy.meshgrid
метод для рисования трехмерного графика в Python. рисунок над переменными d1, d2
, но у меня есть функция, состоящая из массива с 7 элементами, что 3 элемента не зависит от d1, d2
. Когда я пытаюсь нарисовать свой график, я сталкиваюсь с этой ошибкой:
operands could not be broadcast together with shapes (7,) (120,120)
Когда я отлаживаю свой код, я вижу элементы массива, которые не зависят от d1, d2
, имеют форму 1, нодругие имеют форму 120. Как я могу нарисовать такую функцию, используя метод numpy.meshgrid
?
Спасибо. Весь код выглядит следующим образом:
import numpy
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
def function(a, b, c, d1, d2):
Q = numpy.ones(7)
EV = []
EV.append(1 / (a + b))
EV.append(1 / (a + b + c))
EV.append(1 / (a + b + c))
EV.append((1 - numpy.exp(-c * d1)) / c)
EV.append((1 - numpy.exp(-c * d2)) / (c + a))
EV.append((1 - numpy.exp(-c * d1)) / c)
EV.append((1 - numpy.exp(-c * d2)) / (c + a))
return numpy.sum(numpy.multiply(Q, EV) / numpy.sum(numpy.multiply(Q, EV)))
fig = plt.figure()
ax = fig.gca(projection='3d')
# Make data.
d1 = numpy.arange(0, 6, 0.05)
d2 = numpy.arange(0, 6, 0.05)
X, Y = numpy.meshgrid(d1, d2)
# Plot the surface.
ax.set_zlim(2.00, 8.00)
surf = ax.plot_surface(X, Y, function(1, 1, 1, X, Y), cmap='viridis', linewidth=0, antialiased=False)
# Customize the z axis.
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
# Add a color bar which maps values to colors.
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()