如果使用这样的切片分割numpy数组:
假设数据如下所示: [[Y X X X ....] [Y X X X ....]]
X_test = data_test[:, 1:]
y_test = data_test[:, 0]
我认为这样可行但我在这个过程中找不到文档。
test_assembled = [:, y_test:X_test]
答案 0 :(得分:2)
使用
X_test = data_test[:, 1:]
y_test = data_test[:, 0]
X_test
或y_test
的更改将在data_test
中看到。因此,您不需要重新组合它们来传播更改。它们是views
。
使用np.concatante
(或其衍生物,stack
,c_
等)的程序集将生成一个具有自己的数据缓冲区的新数组。这可能是,也可能不是你想要的。
在这种情况下,关于连接它们的唯一棘手的部分是X_test
是2d,而y_test
(用标量索引)是1d。连接必须考虑到这一点。
y_temp = y_test[:,None]
new_data = np.concatenate((y_temp, X_test), axis=1)
np.column_stack
和c_
是方便功能,可为您执行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]])
答案 1 :(得分: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]
为你。