我有函式 z[i][j]=func(x[i],y[j]),其中 x 和 y 以 0.1 的步長從 -1 變為 1。
需要用 z=sin(x y), 當 x<0 和 z=cos(x y) 當 x>0 構建 3D 物件
我做了一些變化(1 作業正常(我猜)),但需要定義一個函式
import numpy as np
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)
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)
fig=plt.figure(figsize=(5,6))
ax=fig.add_subplot(1,1,1,projection='3d')
ax.contour3D(x,y,z,10,cmap='inferno')
plt.show
UPD:我必須在我的作業代碼中匯入以下代碼(函式),但不知道如何使其與 3D 繪圖一起使用)
import numpy as np
def func(x,y):
if (x<0):
return [np.sin(x y)]
elif (x>0):
return [np.cos(x y)]
else:
return [0]
print(func(1,4))
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(-1,1,21)
y=np.linspace(-1,1,21)
def fun(i,j):
for i in x:
fun = []
for j in y:
if i<0:
fun.append(np.sin(i j))
else:
fun.append(np.cos(i j))
fig=plt.figure(figsize=(5,6))
ax=fig.add_subplot(1,1,1,projection='3d')
ax.contour3D(x,y,fun(x,y),10,cmap='inferno')
plt.show
和錯誤訊息:
/usr/local/lib/python3.7/dist-packages/matplotlib/contour.py in _check_xyz(self, args, kwargs)
1506
1507 if z.ndim != 2:
-> 1508 raise TypeError(f"Input z must be 2D, not {z.ndim}D")
1509 if z.shape[0] < 2 or z.shape[1] < 2:
1510 raise TypeError(f"Input z must be at least a (2, 2) shaped array, "
我真的很感謝所有的幫助:3
uj5u.com熱心網友回復:
你的錯誤很少。
您使用相同的名稱
def fun()和fun = []有時它可以使大問題你為引數使用了錯誤的名稱 - 你有,
fun(i, j)但后來你使用了for ... in x:,for ... in y:所以你需要fun(x, y)在第一個版本使用兩個串列
z = []和zz = []你追加zz的z-但在功能上只使用一個串列-這可以是最大的問題0D,2D,3D您必須使用
return ...將值從函式發送到主代碼。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# --- functions ---
def fun(x, y):
results = [] # z = []
for i in x:
row = [] # zz = []
for j in y:
if i < 0:
row.append(np.sin(i j))
else:
row.append(np.cos(i j))
results.append(row)
return results
# --- main ---
x = np.linspace(-1, 1, 21)
y = np.linspace(-1, 1, 21)
fig = plt.figure(figsize=(5, 6))
ax = fig.add_subplot(1, 1, 1, projection='3d')
ax.contour3D(x, y, fun(x, y), 10, cmap='inferno')
plt.show()
順便提一句:
您還可以放置一些空格以使代碼更具可讀性 - 即。后面的,空格,周圍的空格=等。
更多:PEP 8 -- Python 代碼風格指南
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/355112.html
