您突出显示的段落是两个逗号分隔的整数语法,它是三个逗号分隔的语法的特例。一旦你理解了三个逗号分隔的语法,两个逗号分隔的语法就到位了。
您的示例等效的三个逗号分隔的整数语法为:
np.r_['0,2,-1', [1,2,3], [4,5,6]]
为了提供更好的解释,我将上面的内容更改为:
np.r_['0,2,-1', [1,2,3], [[4,5,6]]]
上面有两个部分:
逗号分隔的整数字符串
两个逗号分隔的数组
逗号分隔的数组具有以下形状:
np.array([1,2,3]).shape
(3,)
np.array([[4,5,6]]).shape
(1, 3)
换句话说,第一个“数组”是“一维的”,而第二个“数组”是“二维的”。
首先2
in0,2,-1
意味着每个都array
应该升级,以便它被强制至少为2-dimensional
. 由于第二个array
已经2-dimensional
是它不受影响。然而,第一个array
是1-dimensional
并且为了使其2-dimensional
np.r_
需要在其形状中添加一个 1 以tuple
使其成为(1,3)
or (3,1)
。这就是-1
in0,2,-1
发挥作用的地方。它基本上决定了额外的 1 需要放置tuple
在array
. -1
是默认值,并将1
(或1s
如果需要更多尺寸)放在形状的前面tuple
(我将在下面进一步解释原因)。这会将第一个array's
形状tuple
变成(1,3)
这与第二个array's
形状相同tuple
。0
in表示生成的0,2,-1
数组需要沿“0”轴连接。
由于arrays
现在两者都具有连接形状tuple
是(1,3)
可能的,因为如果您将连接轴(上例中的维度 0,其值为 1)放在一边,arrays
其余维度都相等(在这种情况下,剩余维度的值两者arrays
都是 3)。如果不是这种情况,则会产生以下错误:
ValueError:除连接轴外的所有输入数组维度必须完全匹配
现在,如果您连接两个arrays
具有形状(1,3)
的结果array
将具有形状(1+1,3) == (2,3)
,因此:
np.r_['0,2,-1', [1,2,3], [[4,5,6]]].shape
(2, 3)
当0
逗号分隔字符串中的第三个整数使用 a 或正整数时,该整数确定array's
升级后的形状中每个形状元组的开始tuple
(仅适用于arrays
需要升级其维度的那些)。例如0,2,0
,对于arrays
要求形状升级,array's
原始形状tuple
应从升级形状的维度 0 开始tuple
。对于array
[1,2,3]
它的形状tuple
(3,)
,1
将放置在3
. 这将导致形状tuple
等于(3,1)
并且您可以看到原始形状从升级后的形状tuple
(3,)
的维度开始。意味着对于0
tuple
0,2,1
[1,2,3]
array's
shapetuple
(3,)
应该从升级后的 shape 元组的维度 1 开始。这意味着 1 需要放置在维度 0 处。生成的形状元组将是(1,3)
。
当逗号分隔字符串中的第三个整数使用负数时,负号后面的整数决定了原始形状元组的结束位置。当原始形状元组是(3,)
0,2,-1
意味着原始形状元组应该在升级后的形状元组的最后一个维度结束,因此 1 将被放置在升级后的形状元组的维度 0 处,升级后的形状元组将是(1,3)
。现在(3,)
在升级后的形状元组的维度 1 处结束,这也是升级后的形状元组的最后一个维度(原始数组是[1,2,3]
,升级后的数组是[[1,2,3]]
)。
np.r_['0,2', [1,2,3], [4,5,6]]
是相同的
np.r_['0,2,-1', [1,2,3], [4,5,6]]
最后,这是一个具有更多维度的示例:
np.r_['2,4,1',[[1,2],[4,5],[10,11]],[7,8,9]].shape
(1, 3, 3, 1)
逗号分隔的数组是:
[[1,2],[4,5],[10,11]]
具有形状元组(3,2)
[7,8,9]
具有形状元组(3,)
两者都arrays
需要升级到4-dimensional arrays
. 原始array's
形状元组需要从维度 1 开始。
因此,对于第一个数组,形状变为(1,3,2,1)
从3,2
维度 1 开始,因为需要添加两个 1 才能使其4-dimensional
一个 1 放置在原始形状元组之前,一个 1 放置在之后。
使用相同的逻辑,第二个数组的形状元组变为(1,3,1,1)
.
现在arrays
需要使用维度 2 作为连接轴将两者连接起来。从每个数组的升级后的形状元组中消除维度 2 会导致(1,3,1)
两者的元组arrays
。由于生成的元组是相同的,因此可以连接数组并将连接的轴相加以产生(1, 3, 2+1, 1) == (1, 3, 3, 1)
.