Wie erstelle ich ein Array, bei dem jeder Eintrag den gleichen Wert hat? Ich weiß, dass numpy.ones()
und numpy.zeros()
dies für Einsen und Nullen tun, aber was ist mit -1
?
Zum Beispiel:
>>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))
???
Ich weiß nicht, ob es einen Nice-Einzeiler ohne arithmetische Operation gibt, aber der schnellste Ansatz besteht darin, ein nicht initialisiertes Array mit empty
zu erstellen und dann mit .fill()
die Werte festzulegen. Zum Vergleich:
>>> 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
um ehrlich zu sein, neige ich dazu, entweder die Nullmatrix hinzuzufügen oder stattdessen die Einsenmatrix zu multiplizieren, da die Initialisierung selten ein Engpass ist.
Verwenden Sie np.full()
wie folgt:
np.full((2, 5), -1.)
Kehrt zurück:
array([[-1., -1., -1., -1., -1.],
[-1., -1., -1., -1., -1.]])
-1 * np.one ((2,5))
Multiplizieren mit der Zahl, die Sie in der Matrix benötigen, ist der Trick.
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.]])
Für ein Array von -1s
-1 * np.ones((2,5))
Einfach mit der Konstanten multiplizieren.
foo = np.repeat(10, 50).reshape((5,10))
Erstellt eine 5x10-Matrix von 10s.
Wie wäre es mit:
[[-1]*n]*m
wo ist n die Anzahl der Spalten und m ist die Anzahl der Zeilen?