2016-04-05 2 views
3

Я пытаюсь выполнить два действительных массива с помощью метода np.concat().NumPy: ошибка, пока конкатенация - нулевые массивы не могут быть объединены

Мой код:

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 

Как вы можете видеть, формы массивов выравнивать, до сих пор я получаю эту странную ошибку. Зачем?

EDIT: Я пробовал с axis=1. Тот же результат EDIT 2: Eqauted типы данных с использованием .astype(np.float64). Тот же результат.

+0

Я хотел бы также проверить 'dtype' входов. Что-то во входе в 'np.concatenate' является« нулевым ». Мы не можем это увидеть, но вы будете, если добавите достаточно диагностических отпечатков. – hpaulj

+0

Я пробовал приравнивать дтипы. Еще один результат. Возможно, это ошибка с моей версией Numpy 1.10.4. Правдоподобно? –

+1

Работает ли это с меньшими массивами? – hpaulj

ответ

8

Применение 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.]]) 
0

Передайте массивы как кортеж, а не список. X_train = np.concatenate((train_names,X_train), axis=0)

+0

Я пробовал. Тот же результат. –

+0

В этом контексте список и кортежи обрабатываются одинаково. – hpaulj

Смежные вопросы