np.r_做什么(numpy)?

时间:2015-06-02 13:43:19

标签: python numpy

以下代码取自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_

2 个答案:

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