У меня есть функция вида:
def f(x, y):
total = 0
u = np.zeros(10)
for i in range(0,10):
u[i] = x * i + y* i
if u[i] < 10:
print('do something')
total = total + u[i]
return total
эта функция, когда я пытаюсь с заданными значениями x и y, работает хорошо.
f(3,4)
Out[49]: 63.0
Я хочу создать трехмерный контурный график, используя matplotlib. Пробовал с
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='binary')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z');
Мне пришлось создать сетку сетки для 3D-графика. Я получаю сообщение об ошибке, когда пытаюсь сделать это из-за цикла в моей функции. я получаю сообщение об ошибке
ValueError: setting an array element with a sequence.
Как построить трехмерные графики, если моя функция имеет цикл?
(10, len(x), len(y))
(u = np.zeros((10, len(x), len(y)))
) для матрицы нулей в вашей функцииf
. Более позднее использование pyplot также вызывает некоторые ошибки после этого. - person Endor 8   schedule 22.05.2019u = np.zeros(10, dtype=object)
), который будет делать то, что вы хотите. Однако наилучшая производительность будет достигнута при использовании только функций numpy. Когда вы сравниваете массив numpy с числом, вы получаете массив логических значений, который нельзя использовать непосредственно в оператореif
. Возможно, вы захотите использовать затемnp.any
илиnp.all
для результата (if np.any(u[i] < 10):
), чтобы проверить, являются ли какие-либо или все элементы истинными. - person Endor 8   schedule 22.05.2019