NumPy 数组初始化(填充相同的值)

新手上路,请多包涵

我需要创建一个长度为 n 的 NumPy 数组,其中的每个元素都是 v

有什么比:

 a = empty(n)
for i in range(n):
    a[i] = v

I know zeros and ones would work for v = 0, 1. I could use v * ones(n) , but it won’t work when vNone ,而且速度也会慢得多。

原文由 max 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 423
2 个回答

NumPy 1.8 引入了 np.full() ,这是一种比 empty() 更直接的方法,然后是 fill() 为某个数组填充了–

 >>> np.full((3, 5), 7)
array([[ 7.,  7.,  7.,  7.,  7.],
       [ 7.,  7.,  7.,  7.,  7.],
       [ 7.,  7.,  7.,  7.,  7.]])

>>> np.full((3, 5), 7, dtype=int)
array([[7, 7, 7, 7, 7],
       [7, 7, 7, 7, 7],
       [7, 7, 7, 7, 7]])

这可以说是创建一个充满特定值的数组 方法,因为它明确地描述了正在实现的目标(并且它在原则上可以非常有效,因为它执行非常具体的任务)。

原文由 Eric O Lebigot 发布,翻译遵循 CC BY-SA 3.0 许可协议

针对 Numpy 1.7.0 进行了更新:( 向@Rolf Bartstra 致敬。)

a=np.empty(n); a.fill(5) 最快。

按降速顺序:

 %timeit a=np.empty(10000); a.fill(5)
100000 loops, best of 3: 5.85 us per loop

%timeit a=np.empty(10000); a[:]=5
100000 loops, best of 3: 7.15 us per loop

%timeit a=np.ones(10000)*5
10000 loops, best of 3: 22.9 us per loop

%timeit a=np.repeat(5,(10000))
10000 loops, best of 3: 81.7 us per loop

%timeit a=np.tile(5,[10000])
10000 loops, best of 3: 82.9 us per loop

原文由 Yariv 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题