Concatenando dos matrices unidimensionales NumPy

Tengo dos matrices unidimensionales simples en NumPy . Debería poder concatenarlos utilizando numpy.concatenate . Pero me sale este error para el siguiente código:

TypeError: solo los arrays de longitud 1 se pueden convertir a escalares de Python

Código

import numpy a = numpy.array([1, 2, 3]) b = numpy.array([5, 6]) numpy.concatenate(a, b) 

¿Por qué?

La línea debe ser:

 numpy.concatenate([a,b]) 

Las matrices que desea concatenar deben pasar como una secuencia, no como argumentos separados.

De la documentación de NumPy :

numpy.concatenate((a1, a2, ...), axis=0)

Unir una secuencia de matrices juntos.

Intentaba interpretar su b como el parámetro de eje, por lo que se quejó de que no podía convertirlo en un escalar.

El primer parámetro para concatenate debe ser una secuencia de matrices para concatenar:

 numpy.concatenate((a,b)) # Note the extra parentheses. 

Hay varias posibilidades para concatenar matrices 1D, por ejemplo,

 numpy.r_[a, a], numpy.stack([a, a]).reshape(-1), numpy.hstack([a, a]), numpy.concatenate([a, a]) 

Todas esas opciones son igualmente rápidas para arreglos grandes; Para los pequeños, el concatenate tiene una ligera ventaja:

introduzca la descripción de la imagen aquí

La ttwig fue creada con perfplot :

 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, ) 

Una alternativa es usar la forma abreviada de “concatenar” que es “r _ […]” o “c _ […]” como se muestra en el código de ejemplo a continuación (consulte http://wiki.scipy.org / NumPy_for_Matlab_Users para obtener información adicional):

 %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) 

Lo que resulta en:

 [ 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.]]