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

2024-04-26 12:04:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

有什么比这更好的吗

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

我知道zerosones对v=0,1有效。我可以使用v * ones(n),但当vNone时,它将不起作用,而且会慢得多。


Tags: innumpynone元素foroneszerosrange
3条回答

NumPy 1.8引入了^{},这是一种比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]])

这可以说是创建一个填充了特定值的数组的方法,因为它显式地描述了正在实现的目标(原则上它可以非常高效,因为它执行一个非常特定的任务)。

为Numpy 1.7.0更新:(给@Rolf Bartstra的帽子提示。)

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

按降速顺序:

%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 = np.empty(10)
a.fill(7)

您还应该始终避免像在示例中那样进行迭代。一个简单的a[:] = v将使用numpy broadcasting完成迭代所做的工作。

相关问题 更多 >