%timeit a=np.empty(1e4); a.fill(5)
100000 loops, best of 3: 5.85 us per loop
%timeit a=np.empty(1e4); a[:]=5
100000 loops, best of 3: 7.15 us per loop
%timeit a=np.ones(1e4)*5
10000 loops, best of 3: 22.9 us per loop
%timeit a=np.repeat(5,(1e4))
10000 loops, best of 3: 81.7 us per loop
%timeit a=np.tile(5,[1e4])
10000 loops, best of 3: 82.9 us per loop
你也应该总是避免像你在你的例子中那样进行迭代 . 一个简单的 a[:] = v 将使用numpy broadcasting完成你的迭代所做的事情 .
56
显然,不仅绝对速度而且速度顺序(由用户1579844报告)取决于机器;这是我发现的:
a=np.empty(1e4); a.fill(5) 是最快的;
按降序速度顺序:
timeit a=np.empty(1e4); a.fill(5)
# 100000 loops, best of 3: 10.2 us per loop
timeit a=np.empty(1e4); a[:]=5
# 100000 loops, best of 3: 16.9 us per loop
timeit a=np.ones(1e4)*5
# 100000 loops, best of 3: 32.2 us per loop
timeit a=np.tile(5,[1e4])
# 10000 loops, best of 3: 90.9 us per loop
timeit a=np.repeat(5,(1e4))
# 10000 loops, best of 3: 98.3 us per loop
timeit a=np.array([5]*int(1e4))
# 1000 loops, best of 3: 1.69 ms per loop (slowest BY FAR!)
7 回答
NumPy 1.8引入了np.full(),这是一个比
empty()
更直接的方法,后跟fill()
用于创建一个填充了某个值的数组:这可以说是创建一个充满某些值的数组的方式,因为它明确地描述了正在实现的内容(原则上它可以非常高效,因为它执行一个非常特定的任务) .
Updated for Numpy 1.7.0: (给@Rolf Bartstra的帽子 . )
a=np.empty(n); a.fill(5)
是最快的 .按降序速度顺序:
我相信fill是最快的方法 .
你也应该总是避免像你在你的例子中那样进行迭代 . 一个简单的
a[:] = v
将使用numpy broadcasting完成你的迭代所做的事情 .显然,不仅绝对速度而且速度顺序(由用户1579844报告)取决于机器;这是我发现的:
a=np.empty(1e4); a.fill(5)
是最快的;按降序速度顺序:
所以,试着找出并使用你平台上最快的东西 .
我有
记住,但显然这比所有其他建议要慢得多
n
.这里与perfplot(我的宠物项目)进行了全面比较 .
两个
empty
替代品仍然是最快的(使用NumPy 1.12.1) .full
赶上大型数组 .生成图的代码:
您可以使用
numpy.tile
,例如:虽然
tile
是指'tile'数组(而不是标量,如本例所示),但它可以完成任务,创建任意大小和维度的预填充数组 .没有numpy