2017-10-01 14 views
1

IWie Spalten zu einer großen numpy Matrix

2 3 
1 2 
3 9 
. 
. 

Ich brauche eine 2-D numpy Matrix der Form haben, passieren fügen Sie eine weitere Spalte, um es hinzuzufügen, damit es die Quadratsumme der ersten darstellt zwei Spalten wie:

2 3 13 
1 2 5 
3 9 36 
. 
. 

Welche numpy Funktionen sollte ich verwenden, um diese dritte Spalte hinzuzufügen? meine Matrizen haben eine große Anzahl von Zeilen und ich will es tun, ohne

zunächst

Antwort

2

Berechnen Sie die Summe der quadratischen einer for-Schleife, dann numpy.column_stack verwenden Sie es mit dem ursprünglichen Array zu binden:

a = np.array([[2,3], [1,2], [3,9]]) 

np.column_stack((a, np.sum(np.power(a, 2), axis=1))) 
#array([[ 2, 3, 13], 
#  [ 1, 2, 5], 
#  [ 3, 9, 90]]) 
2
In [273]: x=np.array([[2,3],[1,2],[3,9]]) 
In [274]: x**2 
Out[274]: 
array([[ 4, 9], 
     [ 1, 4], 
     [ 9, 81]], dtype=int32) 

keepdims führt die Summe, während eine 2D-Form

Halte
In [275]: (x**2).sum(axis=1, keepdims=True) 
Out[275]: 
array([[13], 
     [ 5], 
     [90]], dtype=int32) 

Dann ein straight forward verketten ist möglich:

In [276]: np.concatenate((x,_),axis=1) 
Out[276]: 
array([[ 2, 3, 13], 
     [ 1, 2, 5], 
     [ 3, 9, 90]]) 

reshape und hstack und column_stack tun, um die gleiche Art von Sache, nur verschiedene Möglichkeiten für verketten die Spaltenanordnung zu schaffen.

+0

Richtig, aber ich sah die andere Antwort nicht, als ich meins postete. Schätze, es kann nicht geholfen werden, diese paar Sekunden können den Unterschied zwischen 2 Stimmen und keine Stimmen ausmachen. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ, Ich habe nur auf die Gemeinsamkeit unserer Antworten hingewiesen, ohne Auswirkungen auf Priorität oder Stimmen. – hpaulj

+0

Ah, in Ordnung. Ich habe vielleicht zu viel in Ihre Aussage gelesen. Es ist ein bisschen vernichtend, wenn das passiert - es gibt kleine Unterschiede zwischen den beiden Antworten, aber nur eine wird erkannt. Wie auch immer, ich habe dich aufgerüstet, also viel Glück. –

0

Es ist einfach, schneiden Sie die erste und zweite Spalte und finden Sie die Summe der Quadrate und verketten sich zu seiner ursprünglichen numpy Matrix.

Nur eine Zeile.

 np.concatenate((x,np.array([x[:,0]**2 + x[:,-1]**2]).T),axis=1) 
+0

Die anderen Antworten können auch auf eine Zeile reduziert werden, aber das ist nicht nötig. Ihre Antwort ist nicht besser, wenn überhaupt, ist es schlimmer, weil sie nicht auf mehrere Spalten verallgemeinern kann. –

+0

Natürlich ist es verallgemeinert wie in dem Fall, sagte er. Sie können es versuchen, indem Sie mehr Zeilen hinzufügen, die das sein können, was Sie sagen. –

Verwandte Themen