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