理解numpy.r_()连接的语法

Ame*_*ina 15 python numpy concatenation

我在函数r_的numpy文档中阅读了以下内容:

字符串整数指定堆叠多个逗号分隔数组的轴.由两个逗号分隔的整数组成的字符串允许指示强制每个条目的最小维数,作为第二个整数(要连接的轴仍然是第一个整数).

他们给出了这个例子:

>>> np.r_['0,2', [1,2,3], [4,5,6]] # concatenate along first axis, dim>=2
array([[1, 2, 3],
       [4, 5, 6]])
Run Code Online (Sandbox Code Playgroud)

我不遵循,字符串'0,2'指示numpy做什么?

除了上面的链接,是否有另一个网站有更多关于此功能的文档?

unu*_*tbu 13

'n,m'告诉r_连接axis=n,并生成至少m维度的形状:

In [28]: np.r_['0,2', [1,2,3], [4,5,6]]
Out[28]: 
array([[1, 2, 3],
       [4, 5, 6]])
Run Code Online (Sandbox Code Playgroud)

因此我们沿着轴= 0连接,因此我们通常希望结果具有形状(6,),但是因为m=2,我们告诉r_它的形状必须至少是2维的.所以我们得到了形状(2,3):

In [32]: np.r_['0,2', [1,2,3,], [4,5,6]].shape
Out[32]: (2, 3)
Run Code Online (Sandbox Code Playgroud)

看看我们增加时会发生什么m:

In [36]: np.r_['0,3', [1,2,3,], [4,5,6]].shape
Out[36]: (2, 1, 3)    # <- 3 dimensions

In [37]: np.r_['0,4', [1,2,3,], [4,5,6]].shape
Out[37]: (2, 1, 1, 3) # <- 4 dimensions
Run Code Online (Sandbox Code Playgroud)

任何你可以用做r_也可以用的更易读阵列建设一个功能实现,例如np.concatenate,np.row_stack,np.column_stack,np.hstack,np.vstack或者np.dstack,虽然它也可能需要一个电话reshape.

即使调用重塑,其他功能甚至可能更快:

In [38]: %timeit np.r_['0,4', [1,2,3,], [4,5,6]]
10000 loops, best of 3: 38 us per loop
In [43]: %timeit np.concatenate(([1,2,3,], [4,5,6])).reshape(2,1,1,3)
100000 loops, best of 3: 10.2 us per loop
Run Code Online (Sandbox Code Playgroud)