我正在尝试将列添加到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)
答案 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)