如何创建一个元素都等于指定值的数组?

max*_*axm 18 python numpy scipy

如何创建一个每个条目都相同的数组?我知道numpy.ones()numpy.zeros()为1和0做这个,但是怎么样-1

例如:

>>import numpy as np
>>np.zeros((3,3))
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

>>np.ones((2,5))
array([[ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.]])

>>np.negative_ones((2,5))
???
Run Code Online (Sandbox Code Playgroud)

DSM*_*DSM 17

我不知道是否有一个没有算术运算的漂亮单线程,但最快的方法可能是创建一个未初始化的数组empty然后.fill()用来设置值.为了比较:

>>> timeit m = np.zeros((3,3)); m += -1
100000 loops, best of 3: 6.9 us per loop
>>> timeit m = np.ones((3,3)); m *= -1
100000 loops, best of 3: 9.49 us per loop
>>> timeit m = np.zeros((3,3)); m.fill(-1)
100000 loops, best of 3: 2.31 us per loop
>>> timeit m = np.empty((3,3)); m[:] = -1
100000 loops, best of 3: 3.18 us per loop

>>> timeit m = np.empty((3,3)); m.fill(-1)
100000 loops, best of 3: 2.09 us per loop
Run Code Online (Sandbox Code Playgroud)

但老实说,我倾向于添加零矩阵或者将那些矩阵相乘,因为初始化很少是瓶颈.

  • @Ashrj, 1. 不幸的是,这些时间并不那么具有代表性,因为数组太小,函数调用的开销起到了作用(可能是为什么它有点慢)。2. 实际上这些时间在不同版本中略有变化,但我认为使用切片(我也喜欢 `[...]`)或 `.fill` 都很棒(并且在这里也能获胜)。加:*可读性很重要*... (2认同)

Don*_*ero 11

使用np.full()方法如下:

np.full((2, 5), -1.)
Run Code Online (Sandbox Code Playgroud)

返回:

array([[-1., -1., -1., -1., -1.],
       [-1., -1., -1., -1., -1.]])
Run Code Online (Sandbox Code Playgroud)

  • 是的。2013 年 10 月 numpy 1.8.0 中的新内容,在此处接受的答案之后,否则这将是唯一的答案。 (4认同)

Man*_*ani 8

-1*np.ones((2,5))

乘以矩阵中所需的数字就可以了.

In [5]: -1 * np.ones((2,5))
Out[5]: 
array([[-1., -1., -1., -1., -1.],
       [-1., -1., -1., -1., -1.]])

In [6]: 5 * np.ones((2,5))                                                                                                                                                                                                                  
Out[6]:                                                                                                                                                                                                                                      
array([[ 5.,  5.,  5.,  5.,  5.],                                                                                                                                                                                                            
       [ 5.,  5.,  5.,  5.,  5.]]) 
Run Code Online (Sandbox Code Playgroud)