numpy array concatenate: “ValueError: todas las matrices de entrada deben tener el mismo número de dimensiones”

¿Cómo concatenar estas matrices numpy ?

primer np.array con una forma (5,4)

 [[ 6487 400 489580 0] [ 6488 401 492994 0] [ 6491 408 489247 0] [ 6491 408 489247 0] [ 6492 402 499013 0]] 

segundo np.array con una forma (1,5)

 [ 16. 15. 12. 12. 17. ] 

el resultado final debe ser

 [[ 6487 400 489580 0 16] [ 6488 401 492994 0 15] [ 6491 408 489247 0 12] [ 6491 408 489247 0 12] [ 6492 402 499013 0 17]] 

np.concatenate([array1, array2]) pero me sale este error

ValueError: all the input arrays must have same number of dimensions

¿Qué estoy haciendo mal?

Para usar np.concatenate , necesitamos extender la segunda matriz a 2D y luego concatenar a lo largo de axis=1

 np.concatenate((a,b[:,None]),axis=1) 

Alternativamente, podemos usar np.column_stack que lo cuida –

 np.column_stack((a,b)) 

Ejecución de la muestra

 In [84]: a Out[84]: array([[54, 30, 55, 12], [64, 94, 50, 72], [67, 31, 56, 43], [26, 58, 35, 14], [97, 76, 84, 52]]) In [85]: b Out[85]: array([56, 70, 43, 19, 16]) In [86]: np.concatenate((a,b[:,None]),axis=1) Out[86]: array([[54, 30, 55, 12, 56], [64, 94, 50, 72, 70], [67, 31, 56, 43, 43], [26, 58, 35, 14, 19], [97, 76, 84, 52, 16]]) 

Si b es tal que es una matriz 1D de dtype=object con una forma de (1,) , lo más probable es que todos los datos dtype=object contenidos en el único elemento que contiene, debemos aplanarlo antes de concatenar. Para ese propósito, podemos usar np.concatenate en él también. Aquí hay una muestra de ejecución para aclarar el punto:

 In [118]: a Out[118]: array([[54, 30, 55, 12], [64, 94, 50, 72], [67, 31, 56, 43], [26, 58, 35, 14], [97, 76, 84, 52]]) In [119]: b Out[119]: array([array([30, 41, 76, 13, 69])], dtype=object) In [120]: b.shape Out[120]: (1,) In [121]: np.concatenate((a,np.concatenate(b)[:,None]),axis=1) Out[121]: array([[54, 30, 55, 12, 30], [64, 94, 50, 72, 41], [67, 31, 56, 43, 76], [26, 58, 35, 14, 13], [97, 76, 84, 52, 69]]) 

También hay np.c_

 >>> a = np.arange(20).reshape(5, 4) >>> b = np.arange(-1, -6, -1) >>> a array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19]]) >>> b array([-1, -2, -3, -4, -5]) >>> np.c_[a, b] array([[ 0, 1, 2, 3, -1], [ 4, 5, 6, 7, -2], [ 8, 9, 10, 11, -3], [12, 13, 14, 15, -4], [16, 17, 18, 19, -5]]) 

Puedes hacer algo como esto.

 import numpy as np x = np.random.randint(100, size=(5, 4)) y = [16, 15, 12, 12, 17] print(x) val = np.concatenate((x,np.reshape(y,(x.shape[0],1))),axis=1) print(val) 

Esto produce:

 [[32 37 35 53] [64 23 95 76] [17 76 11 30] [35 42 6 80] [61 88 7 56]] [[32 37 35 53 16] [64 23 95 76 15] [17 76 11 30 12] [35 42 6 80 12] [61 88 7 56 17]]