Создание 3D объекта по функции с 2 условиями
Имеется функция z=func(x,y), которая принимает значения sin(x+y) при x<0 и cos(x+y) при x>0; х и у меняются по правилу от -1 до 1 с шагом 0,1. Перепробовал множество вариантов, остановился на следующем:
import numpy as np
import math
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x=np.linspace(-1,1,21)
y=np.linspace(-1,1,21)
x1,y1=np.meshgrid(x,y)
for i in x:
for j in y:
if i<0:
z=np.sin(i+j)
if i>0:
z=np.cos(i+j)
fig=plt.figure(figsize=(5,6))
ax=fig.add_subplot(1,1,1,projection='3d')
ax.contour3D(x1,y1,z,10,cmap='inferno')
plt.show
Тут ошибка Input z must be 2D, not 0D. Во всех вариантах были +- похожие (либо 1D, либо 0D) От безысходности получил следующие уточнения: z нужно задать в циклах (один j, вложенный в другой j). Оно должно перебирать все x[i] и y[j] и задавать z[i][j], где i,j индексы матриц x и y. Спасибо за помощь :3
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
z = []
for i in x:
zz = []
for j in y:
if i<0:
zz.append(np.sin(i+j))
else:
zz.append(np.cos(i+j))
z.append(zz)
или генератором списка
z=[[(np.cos(i+j) if i>=0 else np.sin(i+j)) for i in x] for j in y]