2017-12-08 7 views
1

にスライスをnumpyの [YXX X ...] [YXX Xを.... ]]ピースバック一緒に元の配列

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

これはうまくいくと思われましたが、その過程でドキュメントが見つかりませんでした。

test_assembled = [:, y_test:X_test] 

答えて

0

この場合、あなたはnp.c_を使用することができます。

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_は、便利なあなたのためa[:,0]で "行方不明の寸法を" 扱い。 X_testまたはy_test

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

変更により

2

data_testで見られます。したがって、変更を伝播するために再構成する必要はありません。彼らはviewsです。

np.concatante(またはその派生物、stackc_など)を使用するアセンブリは、独自のデータバッファを使用して新しい配列を生成します。それはあなたが望むものかもしれません。

X_testは2dであり、y_test(スカラーで索引付けされています)は1dですが、この場合、それらを連結するのは難しい部分です。連結することはそれを考慮する必要があります。明示的な方法は、

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

np.column_stackc_にあるあなたのためにそのy_tempステップを行うことができます便利な機能です。

同じように良いのは、「ブランク」受信機アレイを構築し、同じスライス表記でアレイをコピーすることです。

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

は、実際には、あなたはdata_testにその割り当てを行うことができますが、それをする必要はありません。


検証:

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]]) 
関連する問題