【发布时间】:2023-03-08 12:25:02
【问题描述】:
有一个元组列表l = [(x,y,z), (x,y,z), (x,y,z)]
这个想法是找到为每个 x-s、y-s、z-s 创建不同 np.array 的最快方法。需要帮助以找到最快的解决方案。为了进行速度比较,我使用下面附加的代码
import time
def myfast():
code
n = 1000000
t0 = time.time()
for i in range(n): myfast()
t1 = time.time()
total_n = t1-t0
1. np.array([i[0] for i in l])
np.array([i[1] for i in l])
np.array([i[2] for i in l])
输出:0.9980638027191162
2. array_x = np.zeros((len(l), 1), dtype="float")
array_y = np.zeros((len(l), 1), dtype="float")
array_z = np.zeros((len(l), 1), dtype="float")
for i, zxc in enumerate(l):
array_x[i] = zxc[0]
array_y[i] = zxc[1]
array_z[i] = zxc[2]
输出 5.5509934425354
3. [np.array(x) for x in zip(*l)]
输出 2.5070037841796875
5. array_x, array_y, array_z = np.array(list(zip(*l)))
输出 2.725318431854248
【问题讨论】:
-
@Chris 这是寻找最快解决方案的速度比较。不仅仅是可以在 stackoverflow 上找到的任何解决方案。 PS该帖子中的解决方案比我的第一个解决方案慢:)祝你有美好的一天
-
是的,但是对于更长的列表,如果您想避免编写与元组中的项目一样多的列表推导式,
zip就是您想要的。顺便说一句,rusu 的解决方案没有给出你想要的结果...... -
@yatu 非常感谢您的解释,我明白了。但就我而言,没有那么多项目可以创建大量列表理解。
-
第一种方法是不实用的,(例如,如果你的 len(l) = 1023131,你必须写很多代码
标签: python python-3.x list performance numpy