mplot3d 函数plot_surface
要求将定义曲面的点的坐标输入为三个二维数组 X、Y、Z。这是一个演示这些数组构造的工作示例。我在由角度 u 和 v 参数化的球坐标中表示 x,y,z 坐标。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
# generate the coordinates on the surface by parameterizing
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, 2 * np.pi, 100)
x = np.outer(np.cos(u), np.sin(v))
y = np.outer(np.sin(u), np.sin(v))
z = np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z)
plt.show()
我相信由 X,Y,Z 表示的坐标正是[X[i,j], Y[i,j], Z[i,j]]
在 i 和 j 上索引的所有三元组的集合。(1)这是正确的吗?
我为构建真实图而编写的许多函数都采用了一个三元组列表的参数,正是上述三元组的形式;即points = [[x1,y1,z1], [x2,y2,z2], ..., [xn, yn, zn]]
。我预计这个输入会被 接受plot_surface
,但事实并非如此。结果我发现自己需要相当频繁地在两种表示之间进行转换,例如通过
points = zip(*[x.flatten() for x in (X,Y,Z)])
我可以这样做,但我担心我自己的函数也应该使用 2D 数组格式。(2)数组输入格式除了易于编程构造这些数组之外,还有其他原因吗?例如,它的计算效率更高吗?