Что делает 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]])