我需要将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问题,其中一个版本工作而不是另一个版本?谢谢。
答案 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中,这个问题引发了一个错误,而不仅仅是一个警告。