2017-12-08 1 views
1

, wenn Sie eine numpy Array aufgeteilt Scheiben wie folgt aus:Stück wieder zusammen numpy Scheiben in Original-Array

Unter der Annahme, Daten sah wie folgt aus: [[YXX X ....] [YXX X .... ]]

X_test = data_test[:, 1:] 
y_test = data_test[:, 0] 

Ich nahm an, dies würde funktionieren, aber ich kann keine Dokumentation in diesem Prozess finden.

test_assembled = [:, y_test:X_test] 

Antwort

0

In diesem Fall können Sie np.c_ verwenden:

a = np.identity(4) 
x, y = a[:,0], a[:,1:] 
np.c_[x,y] 
# array([[ 1., 0., 0., 0.], 
#  [ 0., 1., 0., 0.], 
#  [ 0., 0., 1., 0.], 
#  [ 0., 0., 0., 1.]]) 

np.c_ bequem übernimmt die "fehlende Dimension" in a[:,0] für Sie.

2

Mit

X_test = data_test[:, 1:] 
y_test = data_test[:, 0] 

Änderungen an X_test oder y_test wird in data_test zu sehen. Sie müssen sie also nicht erneut zusammensetzen, um Änderungen zu übertragen. Sie sind views.

Eine Baugruppe, die np.concatante (oder ihre Derivate, stack, c_ usw.) verwendet, wird ein neues Array mit einem eigenen Datenpuffer erzeugen. Das kann sein oder nicht, was Sie wollen.

In diesem Fall ist der einzige knifflige Teil bei der Verkettung der X_test 2d, während y_test (mit einem Skalar indiziert) 1d ist. Die Verkettung muss dies berücksichtigen. Der explizite Weg zu

y_temp = y_test[:,None] 
new_data = np.concatenate((y_temp, X_test), axis=1) 

np.column_stack und c_ Komfortfunktionen sind, die für Sie, dass y_temp Schritt tun können.

Genauso gut ist es, ein "leeres" Empfänger-Array zu konstruieren und die Arrays mit der gleichen Slicing-Notation zu kopieren.

new_data = np.zeros_like(data_test) 
new_data[:, 1:] = X_test 
new_data[:,0] = y_test 

In der Tat könnten Sie diese Zuordnung zu data_test tun, aber es gibt keine Notwendigkeit, das zu tun.


Überprüfung:

In [135]: data_test = np.arange(12).reshape(3,4) 
In [136]: data_test 
Out[136]: 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11]]) 
In [137]: X_test = data_test[:,1:] 
In [139]: y_test = data_test[:,0] 
In [140]: y_test 
Out[140]: array([0, 4, 8]) 
In [141]: y_test *= 10 
In [142]: data_test 
Out[142]: 
array([[ 0, 1, 2, 3], 
     [40, 5, 6, 7], 
     [80, 9, 10, 11]]) 
In [143]: np.concatenate((y_test[:,None], X_test), axis=1) 
Out[143]: 
array([[ 0, 1, 2, 3], 
     [40, 5, 6, 7], 
     [80, 9, 10, 11]]) 
In [144]: np.column_stack((y_test, X_test)) 
Out[144]: 
array([[ 0, 1, 2, 3], 
     [40, 5, 6, 7], 
     [80, 9, 10, 11]]) 
In [145]: new = np.zeros_like(data_test) 
In [146]: new[:,1:] = X_test 
In [147]: new[:,0] = y_test/10 
In [148]: new 
Out[148]: 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11]]) 
Verwandte Themen