2016-06-06 2 views
0

я должен был бы объединить 2 вектор-строку в большой вектор-строку с СЦЕПИТЬ, в моем коде с NumPy 1.9.1, у меня есть что-то вроде:NumPy конкатенации строки вектор

print ("new_vector is ",repr(new_vector)) 
print ("np.zeros((self.N_corr))",repr(np.zeros((self.N_corr)))) 
print ("np.concatenate((new_vector,np.zeros((self.N_corr))),axis=1) is ", 
     np.concatenate((new_vector,np.zeros((self.N_corr))),axis=1)) 

G_3_new_line=np.concatenate((new_vector,np.zeros((self.N_corr))),axis=1) 

тогда все правильно с :

('new_vector is ', 'array([ 0.  , 0.  , 0.  , -0.01262626, 0.00757576,\n  0.03030303, -0.01515152, 0.  , 0.03030303, -0.01515152,\n  0.00757576, 0.03030303, 0.01515152, 0.03030303, -0.0145202 ,\n  -0.01515152, 0.00757576, 0.03030303, -0.01515152, 0.  ,\n  0.03030303, -0.0145202 , 0.00694444, 0.0290404 , -0.21528928])') 
('np.zeros((self.N_corr))', 'array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])') 
('np.concatenate((new_vector,np.zeros((self.N_corr))),axis=1) is ', array([ 0.  , 0.  , 0.  , -0.01262626, 0.00757576, 
     0.03030303, -0.01515152, 0.  , 0.03030303, -0.01515152, 
     0.00757576, 0.03030303, 0.01515152, 0.03030303, -0.0145202 , 
     -0.01515152, 0.00757576, 0.03030303, -0.01515152, 0.  , 
     0.03030303, -0.0145202 , 0.00694444, 0.0290404 , -0.21528928, 
     0.  , 0.  , 0.  , 0.  , 0.  , 
     0.  , 0.  , 0.  , 0.  , 0.  , 
     0.  , 0.  , 0.  , 0.  , 0.  , 
     0.  , 0.  , 0.  , 0.  , 0.  , 
     0.  , 0.  , 0.  , 0.  , 0.  ])) 

Но мой коллега, при попытке запустить тот же сценарий, есть ошибка:

 ('new_vector is ', 'array([ 0.  , 0.  , 0.  , -0.01262626, 0.00757576,\n  0.03030303, -0.01515152, 0.  , 0.03030303, -0.01515152,\n  0.00757576, 0.03030303, 0.01515152, 0.03030303, -0.0145202 ,\n  -0.01515152, 0.00757576, 0.03030303, -0.01515152, 0.  ,\n  0.03030303, -0.0145202 , 0.00694444, 0.0290404 , -0.21528928])') 
('np.zeros((self.N_corr))', 'array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])') 
File "/Users/AAA/repos/my_stuff/fluorinated_rocksalts/cluster_expansion/Co/test_BBB/eci_fit.py", line 415, in _calc_ecis 
     ,np.concatenate((new_vector,np.zeros((self.N_corr))),axis=1)) 
IndexError: axis 1 out of bounds [0, 1) 

Он работает с numpy 1.11 ... Но это проблема с несколькими проблемами, когда одна версия работает, а не другая? Спасибо.

ответ

0

Казалось бы, когда ваш коллега запускает код new_vector или np.zeros((self.N_corr)) имеет размерность (n,) означает одно измерение. Чтобы использовать axis=1 с np.concatenate, все объединенные массивы должны иметь второе измерение. Таким образом, код может быть одним и тем же, но установка векторов не является. Вы можете добавить измерение несколькими способами. Самый простой способ -

new_vector[:, None] 

Я не могу допустить, чтобы многое другое. Надеюсь это поможет.

0

В моей системе («1.11.0») я получаю ту же ошибку:

In [47]: np.concatenate((np.arange(3),np.zeros((3))),axis=1) 
--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-47-2b11cbfcb685> in <module>() 
----> 1 np.concatenate((np.arange(3),np.zeros((3))),axis=1) 

IndexError: axis 1 out of bounds [0, 1) 

Что меня удивляет, что вы, на ваш старый, не получил ту же ошибку. Возможно, добавлена ​​некоторая проверка ошибок, о которой я не знаю. Но я понимаю, что такая конкатенация всегда была неправильной. 1d массивы имеют только одна ось, 0.

===================

я нашел закрытый вопрос и тянуть запрос на NumPy GitHub:

BUG: allow any axis for np.concatenate for 1D #440 

Старые версии numpy игнорировали параметр оси, когда массивы были 1d. Начиная с 1.7 они начали выпустить

This raises a FutureWarning for axis numbers != 0, but allows them, for backwards compatibility.

Но предупреждения обычно появляются только в первый раз, когда они возникают во время сеанса, и может быть выключен. По-видимому, в 1.11 этот вопрос вызывает ошибку, а не только предупреждение.

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