有一个元组列表l = [(x,y,z), (x,y,z), (x,y,z)]
我们的想法是找到最快的方法来创造不同的np.阵列对于每个x-s,y-s,z-s。需要帮助找到最快的解决方案。为了进行速度比较,我使用下面附带的代码
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])
output: 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]
output 5.5509934425354
3. [np.array(x) for x in zip(*l)]
output 2.5070037841796875
5. array_x, array_y, array_z = np.array(list(zip(*l)))
output 2.725318431854248
你可以试试:
或者只是:
更优雅的方式:
这里有一些非常好的选择,所以我总结了它们并比较了速度:
首先,我断言它们都返回相同的数据(使用
np.array_equal()
):时间比较:
给出以下结果:
使
f5()
成为短输入的最快选项,f4()
成为大输入的最快选项。你知道吗如果每个元组中的元素数超过3个,则只有3个函数适用于该情况(其他函数针对每个元组中的3个元素进行硬编码):
使
f5()
再次成为这些标准的最快选项。你知道吗也许我遗漏了什么,但为什么不直接将元组列表传递给
np.array
?说如果:顺便说一句,我更喜欢使用以下时间代码:
相关问题 更多 >
编程相关推荐