鉴于:
X = [[1, 0, 1, 1], [1, 1, 1, 1], [1, 0, 0, 0]]
y = [1, -1, 0]
X = np.asarray(X, np.uint8)
y = np.asarray(y, np.int8).T
con = np.concatenate(X, y)
print(con)
其中X
应该是大小为(3,4)的数据集,而y
是矩阵X
中每行的类标签。例如,X[0]= [1, 0, 1, 1]
在y[0]
中的类标签等于1,即y[0]=1
。我想将X
和y
合并到一个大小为(3,5)的矩阵中,其中新列是y
列表。但是,前面的代码给了我这个错误:
Traceback (most recent call last):
File "test.py", line 38, in <module>
con = np.concatenate(X, y)
TypeError: only integer scalar arrays can be converted to a scalar index
我不确定如何修复它。任何帮助表示赞赏。
答案 0 :(得分:0)
的第一个问题
np.concatenate(X, y)
是第二个参数应该是轴,而不是第二个数组。如果np.concatenate((X, y), axis=1)
和X
具有相同的形状,则y
会起作用。但他们没有。
In [181]: X = [[1, 0, 1, 1], [1, 1, 1, 1], [1, 0, 0, 0]]
...: y = [1, -1, 0]
...:
In [182]: np.column_stack((X,y))
Out[182]:
array([[ 1, 0, 1, 1, 1],
[ 1, 1, 1, 1, -1],
[ 1, 0, 0, 0, 0]])
column_stack
确保输入具有连接为列的正确形状:
In [183]: np.concatenate((X,y),axis=1)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-183-a97a3320ed3e> in <module>()
----> 1 np.concatenate((X,y),axis=1)
ValueError: all the input arrays must have same number of dimensions
In [184]: np.concatenate((X,np.array(y)[:,None]),axis=1)
Out[184]:
array([[ 1, 0, 1, 1, 1],
[ 1, 1, 1, 1, -1],
[ 1, 0, 0, 0, 0]])
但是在连接具有不同数据类的数组时要小心。 y
是类标签。但是什么是X
?同样的单位?如果它包含浮动,则连接的数组也将浮动。我怀疑这只是使用其他类标签更有意义的代码的一步,例如pandas
或其中一个机器学习包。
答案 1 :(得分:0)
你也可以使用列表,并在最后转换为矩阵(2-dim数组,更具体):
X = [[1, 0, 1, 1], [1, 1, 1, 1], [1, 0, 0, 0]]
y = [1, -1, 0]
myList = [foo[0]+[foo[1]] for foo in zip(X,y)]
myMatrix = np.array(myList)
给你:
array([[ 1, 0, 1, 1, 1],
[ 1, 1, 1, 1, -1],
[ 1, 0, 0, 0, 0]])
但我会将标签行对存储在字典中:
{foo[1]:foo[0] for foo in zip(X,y)}
给你:
{-1: [1, 1, 1, 1], 0: [1, 0, 0, 0], 1: [1, 0, 1, 1]},
为您提供了更大的灵活性,您仍然可以像这样进入一个numpy数组:
np.array([v+[k] for k,v in myDict.items()])