2017-06-05 5 views
0

Multipliziert man habe ich einen numpy 2D-Array:numpy 2D-Array mit 1D-Array

[[1,1,1], 
[1,1,1], 
[1,1,1], 
[1,1,1]] 

Wie kann ich es so, dass es die Indizes von oben nach unten mit den entsprechenden Werten aus einem 1D-Array multipliziert, wenn die Zeile Länge des 2d-Arrays ist kleiner als die Länge des 1d-Array? Zum Beispiel multiplizieren oben mit diesem:

[10, 20, 30, 40] 

dies zu erhalten:

[[10, 10, 10], 
[20, 20, 20], 
[30, 30, 30] 
[40, 40, 40]] 

Wahrscheinlich ein Duplikat, aber ich konnte nicht genau, was ich suche finden. Danke im Voraus.

Antwort

1

* in numpy tut elementweise Multiplikation, beispielsweise durch eine anderen 1d Array 1d Array multiplizieren:

In [52]: np.array([3,4,5]) * np.array([1,2,3]) 
Out[52]: array([ 3, 8, 15]) 

Wenn Sie eine 2D-Array von 1d Array multiplizieren, gleiche geschieht für jede Reihe von 2D-Array:

In [53]: np.array([[3,4,5],[4,5,6]]) * np.array([1,2,3]) 
Out[53]: 
array([[ 3, 8, 15], 
     [ 4, 10, 18]]) 

Für Ihr konkretes Beispiel:

In [66]: ones = np.ones(12, dtype=np.int).reshape(4,3) 

In [67]: a = np.array([10, 20, 30, 40]) 

In [68]: (ones.T * a).T 
Out[68]: 
array([[10, 10, 10], 
     [20, 20, 20], 
     [30, 30, 30], 
     [40, 40, 40]]) 
+0

Hatte aussehen was das bedeutete. Aber ich sehe jetzt, vielen Dank. – user21398

+0

Aber was passiert, wenn Ihre Zeilenlänge kleiner als Ihr 1D Array ist? Funktioniert Transposition noch immer? – user21398

+0

@ user21398, Wenn die Zeilenlänge kleiner (oder größer) als 1d Array ist, können Sie nicht multiplizieren. – Akavall