2016-03-05 31 views
2

我经常有两个numpy 1d阵列,xy,并且想要使用它们执行一些快速sklearn拟合+预测。现在最短语法使用numpy 1d数组作为sklearn X

import numpy as np 
from sklearn import linear_model 

# This is an example for the 1d aspect - it's obtained from something else. 
x = np.array([1, 3, 2, ...]) 
y = np.array([12, 32, 4, ...]) 

我想这样做

linear_model.LinearRegression().fit(x, y)... 

的问题是,它expects an X which is a 2d column array。出于这个原因,我通常给它

x.reshape((len(x), 1)) 

我觉得这很麻烦,难以阅读。

是否有一种更简单的方法将1d数组转换为2d列数组(或者,也可以使用sklearn接受1d数组)?

回答

4

可以切成你的阵列,创建一个newaxis

x[:, None] 

此:

>>> x = np.arange(5) 
>>> x[:, None] 
array([[0], 
     [1], 
     [2], 
     [3], 
     [4]]) 

等同于:

>>> x.reshape(len(x), 1) 
array([[0], 
     [1], 
     [2], 
     [3], 
     [4]]) 

如果你觉得它更具可读性,你可以使用转置矩阵:

np.matrix(x).T 

如果你想要一个数组:

np.matrix(x).T.A 
+0

感谢。这是一个很好的答案。 –