2016-06-06 5 views
0

ich brauchen würde, 2 Zeilenvektor in eine große Zeilenvektor mit verketten verketten, in meinem Code mit numpy 1.9.1, habe ich so etwas wie:numpy concatenate Zeilenvektor

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) 

dann ist alles in Ordnung mit :

('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.  ])) 

Aber mein Kollege, bei dem Versuch, das gleiche Skript auszuführen, haben Fehler:

 ('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) 

Er läuft mit numpy 1.11 ... Aber ist das ein numpiges Problem, wo die eine Version funktioniert und nicht die andere? Vielen Dank.

Antwort

0

Es scheint, dass, wenn Ihr Kollege den Code new_vector oder np.zeros((self.N_corr)) hat Dimension (n,) Bedeutung eine Dimension. Um axis=1 mit np.concatenate zu verwenden, müssen alle Arrays, die verkettet werden, eine zweite Dimension haben. So kann der Code derselbe sein, aber die Einrichtung der Vektoren ist nicht. Sie können eine Dimension auf verschiedene Arten hinzufügen. Am einfachsten ist es,

new_vector[:, None] 

Ich kann nicht viel mehr annehmen. Hoffe das hilft.

0

Auf meinem System (‚1.11.0‘) Ich bekomme den gleichen Fehler:

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) 

Was mich wundert ist, dass Sie auf Ihrem alten, nicht den gleichen Fehler erhalten hat. Es ist möglich, dass eine Fehlerüberprüfung hinzugefügt wurde, die mir nicht bekannt ist. Aber ich verstehe, dass diese Art von Verkettung immer falsch war. 1d-Arrays haben nur eine Achse, 0.

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

ich ein geschlossenes Problem gefunden und ziehen Anfrage auf numpy Github:

Alte Versionen von numpy ignorierten den Achsenparameter, wenn die Arrays 1d waren. Ab 1.7 begann sie in der Regel nur eine

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

Aber Warnungen auszusprechen sie das erste Mal in einer Sitzung auftreten erscheinen, und ausgeschaltet werden kann. Offenbar in 1.11 wirft dieses Problem einen Fehler auf, nicht nur eine Warnung.