NumPy:拼接时出错 - 不能拼接零维数组。

6

我试图通过np.concat() 方法将两个有效的数组连接起来。

我的代码:

print X_train.shape, train_names.shape
X_train = np.concatenate([train_names,X_train], axis=0)

输出结果:


    (3545, 93355) (3545, 692)


    ValueError                                Traceback (most recent call last)
    <ipython-input-58-59dc66874663> in <module>()
      1 print X_train.shape, train_names.shape
    ----> 2 X_train = np.concatenate([train_names,X_train], axis=0)
      

    ValueError: zero-dimensional arrays cannot be concatenated

您可以看到,数组的形状对齐,但是我仍然得到了这个奇怪的错误。为什么?

编辑:我也尝试使用axis=1。相同的结果。

编辑2:使用.astype(np.float64)使数据类型相等。相同的结果。


我还会检查输入的 dtypenp.concatenate 的输入中可能有一些是“零维”的。我们看不到它,但如果您添加足够的诊断打印,您就能看到它。 - hpaulj
我尝试了等同的数据类型,但结果仍然相同。也许这是因为我的Numpy 1.10.4版本存在漏洞。这种可能性存在吗? - silent_grave
1
这适用于较小的数组吗? - hpaulj
1
你所说的“sparse”是指很多零,还是指scipy sparse matrix类型?由于它适用于较小的数组,我怀疑可能是内存或索引问题。我们需要寻找其他“concatenate”错误的问题。 - hpaulj
1
如果你的数组是 scipy sparse,不要使用 np.concatenate。只使用 sparse 函数。 - hpaulj
显示剩余2条评论
3个回答

15

np.concatenate应用于scipysparse矩阵会产生以下错误:

In [162]: from scipy import sparse
In [163]: x=sparse.eye(3)
In [164]: x
Out[164]: 
<3x3 sparse matrix of type '<class 'numpy.float64'>'
    with 3 stored elements (1 diagonals) in DIAgonal format>
In [165]: np.concatenate((x,x))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-165-0b67d0029ca6> in <module>()
----> 1 np.concatenate((x,x))

ValueError: zero-dimensional arrays cannot be concatenated

有些sparse函数可以做到这一点:

In [168]: sparse.hstack((x,x)).A
Out[168]: 
array([[ 1.,  0.,  0.,  1.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  1.]])
In [169]: sparse.vstack((x,x)).A
Out[169]: 
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.],
       [ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

1
将数组作为元组而不是列表传递。 X_train = np.concatenate((train_names,X_train), axis=0)

在这个上下文中,列表和元组被视为相同的。 - hpaulj

1
在我的情况下,问题是由LabelEncoder()返回的矩阵稀疏性导致的。
因此,这行代码给了我一个错误:
np.append(airlineTrain, train_transformed,axis =1)

为了修复它,我使用了这个:
np.append(airlineTrain.toarray(), train_transformed.toarray(),axis =1 )

或者,您可能正在使用NLTK,其中矩阵的稀疏存储可以通过使用todense()进行转换。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接