将新列/数组添加到Numpy数组

时间:2014-02-08 01:15:33

标签: python arrays numpy scikit-learn

我正在尝试将列添加到numpy数组中。每行当前有四个值,我希望每行有五个值。下面是可重现的示例,它返回ValueError: all the input arrays must have same number of dimensions我不明白为什么我会收到错误,因为Y的长度与X相同,就像b的长度一样{ documentation中的a。最后,我希望以最有效的方式将像Y这样的数组添加到现有数组(如X)作为每行的新列。

import numpy as np
from sklearn import datasets

#Documentation
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
c = np.concatenate((a, b.T), axis=1)
print(c)

#My Case
iris = datasets.load_iris()
X = iris.data
Y = iris.target
Z = np.concatenate((X, Y.T), axis = 1) #Is transpose necessary for single dimension array? Throws error either way
print(Z)

编辑我应该补充一点,在实践中,我将使用的是来自sklearn的模型的预测值。所以我特别感兴趣的是将预测值添加到现有数组(如X)的最有效方法,即sklearn使用的格式。下面的解决方案来自M4rtini的评论,我认为这相当于Dietrich的解决方案之一。这是最快的实施吗?

#My Case
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LinearRegression

iris = datasets.load_iris()
X = iris.data
Y = iris.target
model = LinearRegression()
model.fit(X,Y)
y_hat = model.predict(X).reshape(-1,1)
Z = np.concatenate((X, y_hat), axis = 1)

2 个答案:

答案 0 :(得分:2)

请注意b是一个2D数组:

In [1848]: b = np.array([[5, 6]])

In [1849]: b.shape
Out[1849]: (1, 2)

Y.T不会使Y成为2D数组:

In [1856]: Y
Out[1856]: array([0, 1, 2, 3])

In [1857]: Y.T
Out[1857]: array([0, 1, 2, 3])

In [1858]: Y.T.shape
Out[1858]: (4,)

使Y成为2D数组:

In [1867]: Y1=Y.reshape(-1, 1)

In [1868]: Y1
Out[1868]: 
array([[0],
       [1],
       [2],
       [3]])

In [1869]: Y2=Y.reshape(1, -1)

In [1870]: Y2
Out[1870]: array([[0, 1, 2, 3]])

或使用np.newaxis

In [1872]: Y3
Out[1872]: 
array([[0],
       [1],
       [2],
       [3]])

In [1873]: Y4=Y[np.newaxis, :]

In [1874]: Y4
Out[1874]: array([[0, 1, 2, 3]])

答案 1 :(得分:1)

要确保您的尺寸匹配,请尝试:

Z = np.vstack((X.T,Y)).T

Yr = np.reshape(Y, (len(Y),1))
Z = np.hstack((X,Yr))

,因为

X.shape  = (150, 4)
Y.shape  = (150,)
Yr.shape = (150,1)
Z.shape  = (150,5)