以下代码取自here
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_
?
答案 0 :(得分:26)
它的作用是逐行合并。 This post有一个很好的例子:
>>>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的documentation中详细了解它。
答案 1 :(得分:1)
numpy.r_[array[], array[]]
这用于沿着行(第一)轴连接任意数量的数组切片。这是一种快速有效地创建numpy数组的简单方法。
例如,要通过选择所需的元素从两个不同的数组中创建一个数组,我们必须将切片的值分配给新的变量,并使用串联方法将其沿轴连接。
>>> 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]])
我想创建一个新的2D数组,其中包含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])
同样,如果我们想通过在第二轴上堆叠切片的值来创建新数组,则可以使用np.c _
>>> c = np.c_[a[1,1:3],b[1,1:3]]
array([[ 4, 14],
[ 5, 15]])