Что делает np.r_ (numpy)?

Следующий код взят из здесь

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

Итак, я знаю, что searchsorted находит позицию в массиве sa, где элементы bins должны быть вставлены, чтобы сохранить сортировку sa (left дает индекс слева от того, куда мы вставляем значение и right правый индекс). То, что я не понимаю, - это вся конструкция вокруг него, что означает

np.r_[array,array]

Что такое np.r_?

Ответ 1

То, что он делает, - это смешение строк. В этом сообщении есть хороший пример:

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

Подробнее об этом читайте в документации в numpy.

Ответ 2

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

Это используется для объединения любого количества срезов массива вдоль оси (первой) строки. Это простой способ быстро и эффективно создавать массивы.

Например, чтобы создать массив из двух разных массивов, выбрав элементы по вашему выбору, нам нужно будет присвоить нарезанные значения новому varaible и использовать метод конкатенации, чтобы соединить их вдоль оси.

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

Я хочу создать новый 2-D массив с 2 * 2 элементами ([4,5,14,15]), тогда мне придется сделать следующее,

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

Поскольку это явно неэффективный способ, поскольку с увеличением количества элементов, которые должны быть включены в новый массив, увеличиваются временные переменные, которые назначаются для хранения выделенных значений.

Здесь мы используем np.r_

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

Точно так же, если мы хотим создать новый массив, сложив нарезанные значения по 2-ой оси, мы можем использовать np.c_

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