连接两个一维NumPy数组
我在NumPy中有两个简单的一维数组。 我应该能够使用numpy.concatenate连接它们。 但是我得到下面的代码这个错误:
TypeError:只有长度为1的数组可以转换为Python标量
码
import numpy a = numpy.array([1, 2, 3]) b = numpy.array([5, 6]) numpy.concatenate(a, b) 为什么?
该行应该是:
 numpy.concatenate([a,b]) 
要连接的数组需要作为序列传入,而不是单独的参数。
从NumPy文档 :
numpy.concatenate((a1, a2, ...), axis=0)一起join一系列数组。
 它试图把你的b解释为轴参数,这就是为什么它抱怨它不能把它转换成标量。 
  concatenate的第一个参数本身应该是一系列要连接的数组 : 
 numpy.concatenate((a,b)) # Note the extra parentheses. 
另一种方法是使用下面示例代码所示的“concateate”的短格式,即“r _ […]”或“c _ […]”(参见http://wiki.scipy.org / NumPy_for_Matlab_Users获取更多信息):
 %pylab vector_a = r_[0.:10.] #short form of "arange" vector_b = array([1,1,1,1]) vector_c = r_[vector_a,vector_b] print vector_a print vector_b print vector_c, '\n\n' a = ones((3,4))*4 print a, '\n' c = array([1,1,1]) b = c_[a,c] print b, '\n\n' a = ones((4,3))*4 print a, '\n' c = array([[1,1,1]]) b = r_[a,c] print b print type(vector_b) 
其结果是:
 [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] [1 1 1 1] [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 1. 1. 1. 1.] [[ 4. 4. 4. 4.] [ 4. 4. 4. 4.] [ 4. 4. 4. 4.]] [[ 4. 4. 4. 4. 1.] [ 4. 4. 4. 4. 1.] [ 4. 4. 4. 4. 1.]] [[ 4. 4. 4.] [ 4. 4. 4.] [ 4. 4. 4.] [ 4. 4. 4.]] [[ 4. 4. 4.] [ 4. 4. 4.] [ 4. 4. 4.] [ 4. 4. 4.] [ 1. 1. 1.]] 
有一些连接一维数组的可能性,例如,
 numpy.r_[a, a], numpy.stack([a, a]).reshape(-1), numpy.hstack([a, a]), numpy.concatenate([a, a]) 
 所有这些选项对于大型arrays来说同样快速。 对于小企业来说, concatenate有一个小小的优势: 
  
 
情节是用perfplot创build的:
 import numpy import perfplot perfplot.show( setup=lambda n: numpy.random.rand(n), kernels=[ lambda a: numpy.r_[a, a], lambda a: numpy.stack([a, a]).reshape(-1), lambda a: numpy.hstack([a, a]), lambda a: numpy.concatenate([a, a]) ], labels=['r_', 'stack+reshape', 'hstack', 'concatenate'], n_range=[2**k for k in range(19)], xlabel='len(a)', logx=True, logy=True, )