首页 > 解决方案 > 关于带和不带切片的 numpy 数组分配所用时间的问题

问题描述

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

案例 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

标签: arrayspython-3.xnumpynumpy-slicing

解决方案


推荐阅读