np.r_做什么(numpy)?

Phi*_*ipp 24 python numpy

以下代码取自此处

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

所以我知道searchsorted在数组sa中找到bins必须插入元素的位置以便保持sa排序(left给出我们将插入值和right右索引的位置的索引).我不明白的是它周围的整个建筑意味着什么

np.r_[array,array]
Run Code Online (Sandbox Code Playgroud)

什么是np.r_

ome*_*rbp 32

它的作用是逐行合并.这篇文章有一些很好的例子:

>>>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])
Run Code Online (Sandbox Code Playgroud)

在这里以及numpy 的文档中阅读更多相关内容.

  • 为什么不使用 `np.hstack`? (2认同)
  • @mrgloom 你可能想阅读 [这个答案](/sf/answers/2642606291/)... (2认同)

viv*_*vek 12

numpy.r_[array[], array[]]
Run Code Online (Sandbox Code Playgroud)

这用于沿行(第一)轴连接任意数量的数组切片。这是快速高效地创建 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]])
Run Code Online (Sandbox Code Playgroud)

我想创建一个新的二维数组,其中包含 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) 
Run Code Online (Sandbox Code Playgroud)

这显然是一种低效的方法,因为随着新数组中要包含的元素数量的增加,分配用于存储切片值的临时变量也会增加。

这是我们使用 np.r_ 的地方

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

同样,如果我们想通过堆叠第二轴上的切片值来创建一个新数组,我们可以使用 np.c_

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

  • 您说“随着元素数量...增加,临时变量...增加。这就是我们使用 np.r_ 的地方”。但我没有看到行之间的区别:`np.concatenate((a[1,1:3], b[1,1:3]), axis = 0)`和`np.r_[a[ 1,1:3],b[1,1:3]]`。为什么在这里使用“np.r_”会更有效?据我所知,“np.r_”相对于“np.concatenate”的优势在于“np.concatenate”仅将数组作为输入。 (3认同)