我试图理解将值分配给 NumPy
数组的切片。特别是,如果分片分配比“少分片”分配慢。
示例:
a[0,:10] = 5
vs
a[0:1,:10] = 5
这不经意间让我陷入了试图比较的境地
a[:,:] = a[:,:] + 1
vs
a = a + 1
我无法理解结果
案例 1:数组创建在循环之外
b=np.arange(100000000).reshape(-1,100).astype(np.float64)
out = []
for i in range(50):
ti1 = time.time()
b = b+1
tf1 = time.time()
tt1 = tf1 - ti1
ti2 = time.time()
b[:,:] = b[:,:]+1
tf2 = time.time()
tt2 = tf2 - ti2
out.append((tt1,tt2))
print(len(list(filter(lambda x: x[0] > x[1], out))))
输出:
22
CASE 2:数组创建在循环内
out1 = []
for i in range(50):
b=np.arange(100000000).reshape(-1,100).astype(np.float64)
ti1 = time.time()
b = b+1
tf1 = time.time()
tt1 = tf1 - ti1
ti2 = time.time()
b[:,:] = b[:,:]+1
tf2 = time.time()
tt2 = tf2 - ti2
out1.append((tt1,tt2))
print(len(list(filter(lambda x: x[0] > x[1], out1))))
输出:
0
看来,第一次创建数组后,b = b + 1
必然比b[:,:] = b[:,:] + 1
花费的时间少
b = b + 1
和 b[:,:] = b[:,:] + 1
运行一次后,它们现在占用的时间大约相同,有哪些变化?