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

时间:2013-01-01 16:48:35

标签: 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))
???

6 个答案:

答案 0 :(得分:16)

我不知道是否有一个没有算术运算的漂亮单线程,但最快的方法可能是使用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

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

答案 1 :(得分:9)

使用np.full(),如下所示:

np.full((2, 5), -1.)

返回:

array([[-1., -1., -1., -1., -1.],
       [-1., -1., -1., -1., -1.]])

答案 2 :(得分:7)

-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.]]) 

答案 3 :(得分:3)

对于-1的数组

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

简单地乘以常数。

答案 4 :(得分:2)

foo = np.repeat(10, 50).reshape((5,10))

将创建一个10x的5x10矩阵。

答案 5 :(得分:0)

怎么样:

[[-1]*n]*m

其中n是列数,m是行数?