numpy连接行矢量

时间:2016-06-06 13:06:23

标签: numpy concatenation

我需要将2行向量连接成带有连接的大行向量, 在我的numpy 1.9.1代码中,我有类似的东西:

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 ...但这是一个numpy问题,其中一个版本工作而不是另一个版本?谢谢。

2 个答案:

答案 0 :(得分:0)

当您的同事运行代码can't find a user with id=new_vector时,维度np.zeros((self.N_corr))意味着一个维度。要将(n,)axis=1一起使用,所有连接的数组必须具有第二个维度。所以代码可能是相同的,但矢量的设置不是。您可以通过多种方式添加维度。

最简单
np.concatenate

我不能假设更多。希望这会有所帮助。

答案 1 :(得分: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

当数组为1d时,numpy的旧版本忽略了axis参数。从1.7开始,他们开始发布

  

这为轴数提出了一个FutureWarning!= 0,但允许它们为   向后兼容性。

但是警告通常只会在会话中首次出现时出现,并且可以关闭。显然在1.11中,这个问题引发了一个错误,而不仅仅是一个警告。