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]])