您好亲爱的stackoverflow用户。我有一个概念性的问题(因此,不需要任何代码)。我想知道是否有人可以帮助我。
假设我有一个浮点数的python列表和一个相同数字的numpy数组。我想在matplotlib中绘制它们(针对任何东西:时间或空间坐标或其他任何东西-都没关系)。我要二维图。
绘制速度更快的是什么:python列表或numpy数组?
谢谢你。
附言只是为了弄清楚这是一个问题。考虑一个例子:我有一个关于物体速度与时间的数据点。考虑两种情况。首先,我将速度数据点存储在一个python列表中,并将对应的时间存储在另一个python列表中。然后将其绘制在matplotlib中。其次,我将速度数据点存储在一个numpy数组中,并将相应的时间存储在另一个numpy数组中。然后将其绘制在matplotlib中。在哪种情况下绘图会更快?
问题的根源在于我试图用数值方法求解瞬态漂移通量模型。我有相对较多的步骤(时间和空间步骤)。我使用python列表作为解决方案。我没有使用求解器-我编写了自己的代码。当我尝试在matplotlib中绘制数据时,我失败了。 Matplotlib太慢了。我使用pyqtgraph并设法绘制数据。但是我想进一步提高绘图速度。这就是为什么我考虑使用numpy数组。
答案 0 :(得分:0)
在IPython中进行测试:
np.random.seed(123)
# arrays:
a = np.random.randint(0,1000,10000)
b = np.random.randint(0,1000,10000)
%%timeit -r 10 -n 10
plt.scatter(a, b)
plt.close()
54.7 ms ± 1.43 ms per loop (mean ± std. dev. of 10 runs, 10 loops each)
# lists
c = [f for f in a]
d = [f for f in b]
%%timeit -r 10 -n 10
plt.scatter(c, d)
plt.close()
154 ms ± 5.07 ms per loop (mean ± std. dev. of 10 runs, 10 loops each)
在这里绘制数组看起来更快。
测试更多不同长度的案例:
#length|mean|sd
lists = [
(10000, 154, 5.07),
(1000, 33 , 0.235),
(100, 21, 0.198),
(10, 19.4, 0.937)
]
arrays = [
(10000, 54.7, 1.43),
(1000, 21.8, 1.51),
(100,18.4, 1.16),
(10, 18.1, 1.87)
]
# convert to arrays... for faster plotting ;)
lists = np.array(lists)
arrays = np.array(arrays)
plt.errorbar(lists[:,0], lists[:,1], yerr=lists[:,2], color = 'orange', label='lists', fmt='o')
plt.errorbar(arrays[:,0], arrays[:,1], yerr=arrays[:,2], color = 'teal', label='arrays', fmt='o')
plt.xscale('log')
plt.legend()
plt.xlabel('length of plotted data')
plt.ylabel('time per plot / ms')
刚刚看到您正在看花车。我用浮点数重新进行了实验,结果几乎相同:
#data generation:
np.random.seed(123)
a = np.random.rand(10000) * 1000
b = np.random.rand(10000) * 1000
lists = [
(10000, 155, 13.6),
(1000, 33 , 0.443),
(100, 21, 0.436),
(10, 19.1, 1.09)
]
arrays = [
(10000, 54.5, 3.24),
(1000, 21.6, 1.97),
(100, 18.6, 1.61),
(10, 19.4, 1.51)
]