Python 高效地绘制多个球体
我需要在一张图片中绘制许多球体,大小不一。下面的代码可以运行,但运行时间非常长Python 高效地绘制多个球体,python,performance,matplotlib,3d,Python,Performance,Matplotlib,3d,我需要在一张图片中绘制许多球体,大小不一。下面的代码可以运行,但运行时间非常长 import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy fig = plt.figure() ax = fig.gca(projection='3d') ax.set_aspect('equal') u = numpy.linspace(0, 2*numpy.pi, 100) v = numpy.li
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_aspect('equal')
u = numpy.linspace(0, 2*numpy.pi, 100)
v = numpy.linspace(0, numpy.pi, 100)
x = numpy.outer(numpy.cos(u), numpy.sin(v))
y = numpy.outer(numpy.sin(u), numpy.sin(v))
z = numpy.outer(numpy.ones(numpy.size(u)), numpy.cos(v))
for k in range(200):
c = numpy.random.rand(3)
r = numpy.random.rand(1)
ax.plot_surface(
r*x + c[0], r*y + c[1], r*z + c[2],
color='#1f77b4',
alpha=0.5,
linewidth=0
)
plt.show()
我正在寻找一个更有效的解决方案。也许matplotlib中有一个我没有找到的本地球体艺术家?不,没有所谓的“球体艺术家”。即使有,也不会花更少的时间来画 你在问题中提出的解决方案是画许多领域的一种明智的方法。但是,您可能需要考虑在球面上使用更少的点,
u = numpy.linspace(0, 2*numpy.pi, 12)
v = numpy.linspace(0, numpy.pi, 7)
P>一个选项应该考虑的是不使用MatPoTLIB进行3D绘图,因为它是;并改用。
上面在mayavi的图片看起来像
from mayavi import mlab
import numpy as np
[phi,theta] = np.mgrid[0:2*np.pi:12j,0:np.pi:12j]
x = np.cos(phi)*np.sin(theta)
y = np.sin(phi)*np.sin(theta)
z = np.cos(theta)
def plot_sphere(p):
r,a,b,c = p
return mlab.mesh(r*x+a, r*y+b, r*z+c)
for k in range(200):
c = np.random.rand(4)
c[0] /= 10.
plot_sphere(c)
mlab.show()
虽然计算所需时间相似,但在Mayavi中,交互式缩放或平移要快得多
此外,Mayavi实际上提供了类似“球体艺术家”的东西,称为
from mayavi import mlab
import numpy as np
c = np.random.rand(200,3)
r = np.random.rand(200)/10.
mlab.points3d(c[:,0],c[:,1],c[:,2],r)
mlab.show()