执行以下几行:
import numpy as np
import time
start = time.time()
t = []
for i in range(int(1e5)):
t.append(i)
t = np.array(t)
end = time.time()
print(end-start)与此相比较:
import numpy as np
import time
start = time.time()
t = np.array([])
for i in range(int(1e5)):
t = np.append(t,[i])
end = time.time()
print(end-start)第一种比第二种更快,近似等于100倍!
原因是什么?
发布于 2021-11-28 15:49:36
Python列表保存对对象的引用。这些引用在内存中是连续的,但是python以块的形式分配它的引用数组,因此只有一些追加需要一个副本。Numpy不预先分配额外的空间,所以每次都会发生复制。因为所有的列都需要保持相同的长度,所以它们都被复制到每个附加项上。
发布于 2022-02-09 04:15:42
根据这篇文章的说法。
速度试验
他使用Python append()和NumPy append()附加了99 999个数字。结果:
The computation time of the NumPy array: 2.779465675354004
The computation time of the list: 0.010703325271606445对NumPy运行时间较长的解释:
和NumPy.
追加进程不在同一数组中发生。相反,创建并填充了一个新数组。
和Python。
情况很不一样。列表填充过程保留在列表本身内,并且不会生成新的列表。
https://stackoverflow.com/questions/70144878
复制相似问题