如果我有一个矩阵Xy
,我想分成矩阵X
和阵列y
,我通常做这个拆分XY矩阵为X和Y
X, y = Xy[:, :-1], Xy[:, -1]
有没有更好的方式来做到这一点使用scikit-learn
或numpy
?我觉得这是一个非常常见的操作。
如果我有一个矩阵Xy
,我想分成矩阵X
和阵列y
,我通常做这个拆分XY矩阵为X和Y
X, y = Xy[:, :-1], Xy[:, -1]
有没有更好的方式来做到这一点使用scikit-learn
或numpy
?我觉得这是一个非常常见的操作。
可以使用NumPy的内置np.split
-
X, y = np.split(Xy,[-1],axis=1) # Or simply : np.split(Xy,[-1],1)
采样运行 -
In [93]: Xy
Out[93]:
array([[6, 2, 0, 5, 2],
[6, 3, 7, 0, 0],
[3, 2, 3, 1, 3],
[1, 3, 7, 1, 7]])
In [94]: X, y = np.split(Xy,[-1],axis=1)
In [95]: X
Out[95]:
array([[6, 2, 0, 5],
[6, 3, 7, 0],
[3, 2, 3, 1],
[1, 3, 7, 1]])
In [96]: y
Out[96]:
array([[2],
[0],
[3],
[7]])
注意np.split
会产生y
为2D
。要有1D
切片,我们需要在那里使用np.squeeze(y)
。
此外,这些片会观点为原始阵列,所以不需要额外的存储器有 -
In [104]: np.may_share_memory(Xy, X)
Out[104]: True
In [105]: np.may_share_memory(Xy, y)
Out[105]: True
np.split
使用np.array_split
。这反过来做:
sub_arys = []
sary = _nx.swapaxes(ary, axis, 0)
for i in range(Nsections):
st = div_points[i]
end = div_points[i + 1]
sub_arys.append(_nx.swapaxes(sary[st:end], axis, 0))
swapaxes
需要与axis=1
;或不具有交换:
sub_arys = []
for ...:
sub_arys.append(ary[:, st:end])
return sub_arys
即相同:
In [388]: ary=np.arange(12).reshape(3,4)
In [389]: [ary[:,0:3], ary[:,3:4]]
Out[389]:
[array([[ 0, 1, 2],
[ 4, 5, 6],
[ 8, 9, 10]]),
array([[ 3],
[ 7],
[11]])]
split
这样保持尺寸的原始数量。
包装一下你的代码的函数给出的东西,会以最快的速度,如果不是更快:
def xysplit(ary):
return ary[:,:-1], ary[:,-1]
X, y = xysplit(ary)
生产:
array([[ 0, 1, 2],
[ 4, 5, 6],
[ 8, 9, 10]]),
array([ 3, 7, 11])
当我评论说,这似乎是在sklearn
更常见我想到的问题如下:
X = df_wine.iloc[:, 1:].values
y = df_wine.iloc[:, 0].values
....
X_train, X_test, y_train, y_test = train_test_split(X, y, ...
X
和y
是2d和1d阵列,在这种情况下从熊猫数据帧的列中拉出。 train_test_split
用于将X
和y
分成训练和测试组。如果有特殊的X,y
分路器,它将位于sklearn
包中,而不是numpy
。
Python - NumPy array_split adds a dminesion
train_inputs = train[:,: -1]
train_outputs = train[:, -1]
只有'learn'框架内很常见。 “numpy”这样的分裂没有什么特别之处。即使'np.split'也会使用这种索引。 – hpaulj
@hpaulj如果你批评我使用'numpy'标签,我将它包含在内,因为我认为会有一种可以解决我问题的方法。此外,矩阵本身是一个numpy矩阵。此外,如果你正在做'numpy.linalg.solve'这样的方法,也可以在sklearn之外使用这个方法。 – michaelsnowden
'y'应该是1d吗? – hpaulj