¿Qué hace np.r_ (numpy)?

El siguiente código se toma de aquí

sa = sort(a[i:i+block]) n += np.r_[sa.searchsorted(bins[:-1], 'left'), sa.searchsorted(bins[-1], 'right')] 

Por lo tanto, sé que searchsorted encuentra la posición en la matriz sa donde los elementos de los bins deberían insertarse para mantenerlos ordenados (a la left muestra el índice a la izquierda de donde insertamos el valor y el right la derecha). Lo que no entiendo es que toda la construcción a su alrededor significa lo que es

 np.r_[array,array] 

¿Qué es np.r_ ?

Lo que hace es la fusión de filas. Esta publicación tiene un buen ejemplo:

 >>>V = array([1,2,3,4,5,6 ]) >>>Y = array([7,8,9,10,11,12]) >>>np.r_[V[0:2],Y[0],V[3],Y[1:3],V[4:],Y[4:]] array([ 1, 2, 7, 4, 8, 9, 5, 6, 11, 12]) 

Lea más sobre esto en esto, y en la documentación de numpy.

 numpy.r_[array[], array[]] 

Esto se utiliza para concatenar cualquier número de segmentos de matriz a lo largo del eje de la fila (primer). Esta es una forma sencilla de crear matrices numpy de manera rápida y eficiente.

Por ejemplo, para crear una matriz a partir de dos matrices diferentes seleccionando los elementos de su elección, tendremos que asignar los valores segmentados a un nuevo variable y utilizar el método de concatenación para unirlos a lo largo de un eje.

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

Quiero crear una nueva matriz 2-D, con 2 * 2 elementos ([4,5,14,15]) entonces, tendré que hacer lo siguiente,

 >>> slided_a = a[1,1:3] >>> sliced_b = b[1,1:3] >>> new_array = np.concatenate((sliced_a, sliced_b), axis = 0) 

Como esto es claramente una forma ineficiente porque, a medida que aumenta el número de elementos que se incluirán en la nueva matriz, aumentan las variables temporales que se asignan para almacenar los valores divididos.

Aquí es donde usamos np.r_

 >>> c = np.r_[a[1,1:3],b[1,1:3]] array([ 4, 5, 14, 15]) 

Del mismo modo, si queremos crear una nueva matriz al astackr los valores cortados en el segundo eje, podemos usar np.c_

 >>> c = np.c_[a[1,1:3],b[1,1:3]] array([[ 4, 14], [ 5, 15]])