Как создать массив, чьи элементы равны указанному значению?

Как создать массив, где каждая запись имеет одно и то же значение? Я знаю, что 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))
???

Ответ 1

Я не знаю, есть ли хороший однострочный без арифметической операции, но, вероятно, самым быстрым подходом является создание неинициализированного массива с использованием 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

но, честно говоря, я склонен либо добавлять к нулевой матрице, либо умножать матрицу вместо нее, поскольку инициализация редко является узким местом.

Ответ 2

-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

Для массива -1s

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

Просто умножьте с константой.

Ответ 4

Используйте np.full() следующим образом:

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

Возвращает:

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

Ответ 5

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

Создает матрицу 5x10 из 10.

Ответ 6

Как насчет:

[[-1]*n]*m

где n - количество столбцов, а m - количество строк?