我在numpy文档中为函数r_阅读了以下内容:
A string integer specifies which axis to stack multiple comma separated arrays along. A string of two comma-separated integers allows indication of the minimum number of dimensions to force each entry into as the second integer (the axis to concatenate along is still the first integer).
他们举了一个例子:
>>> np.r_['0,2', [1,2,3], [4,5,6]] # concatenate along first axis, dim>=2
array([[1, 2, 3],
[4, 5, 6]])
我不明白,字符串'0,2'
到底指示numpy做什么?
除了上面的链接,还有没有其他网站有更多关于这个功能的文档?
字符串“0,2”告诉numpy沿0轴(第一个轴)连接,并将元素包装在足够多的括号中,以确保二维数组。考虑以下结果:
您突出显示的段落是两个逗号分隔的整数语法,这是三个逗号分隔语法的特例。一旦您理解了三个逗号分隔的语法,两个逗号分隔的语法就就位了。
对于您的示例,等效的三个逗号分隔整数语法为:
为了提供更好的解释,我将上述内容改为:
以上分为两部分:
逗号分隔的整数字符串
两个逗号分隔的数组
逗号分隔的数组具有以下形状:
换句话说,第一个“数组”是“一维”,而第二个“数组”是“二维”。
首先,
0,2,-1
中的2
意味着每个array
都应该升级,这样它就必须至少是2-dimensional
。因为第二个array
已经2-dimensional
了,所以它不受影响。然而,第一个array
是1-dimensional
,为了使其成为2-dimensional
np.r_
,需要在其形状tuple
中添加1,使其成为(1,3)
或(3,1)
。这就是-1
中的0,2,-1
发挥作用的地方。它基本上决定了额外的1需要放在array
的形状tuple
中的什么位置。-1
是默认值,并将1
(或者1s
,如果需要更多维度的话)放在形状tuple
的前面(我在下面进一步解释原因)。这将第一个array's
形状tuple
转换为(1,3)
,这与第二个array's
形状tuple
相同。0,2,-1
中的0
意味着生成的数组需要沿“0”轴连接。由于两个
arrays
现在都有一个tuple
形状的(1,3)
连接是可能的,因为如果将两个arrays
中的连接轴(上面示例中的维度0的值都为1)放在一边,则剩余维度是相等的(在这种情况下,arrays
中的剩余维度的值都是3)。如果不是这样,则会产生以下错误:现在,如果将具有形状
(1,3)
的两个arrays
连接起来,则生成的array
将具有形状(1+1,3) == (2,3)
,因此:当使用
0
或正整数作为逗号分隔字符串中的第三个整数时,该整数确定升级形状tuple
中每个array's
形状元组的开始(仅适用于需要升级其维度的arrays
)。例如,0,2,0
意味着对于需要形状升级的arrays
来说,array's
原始形状tuple
应该从升级形状tuple
的维度0开始。对于形状为tuple
(3,)
的array
[1,2,3]
,将1
放置在3
之后。这将导致形状tuple
等于(3,1)
,正如您所看到的,原始形状tuple
(3,)
从升级形状tuple
的维度0
开始。0,2,1
意味着对于[1,2,3]
,array's
形状tuple
(3,)
应该从升级的形状元组的维度1开始。这意味着1需要放置在维度0处。生成的形状元组将是(1,3)
。当逗号分隔字符串中的第三个整数使用负数时,负号后面的整数将确定原始形状元组的结束位置。当原始形状元组是
(3,)
0,2,-1
时,意味着原始形状元组应该结束于升级形状元组的最后一个维度,因此1将放置在升级形状元组的维度0处,而升级形状元组将是(1,3)
。现在(3,)
结束于升级形状元组的维度1,该维度也是升级形状元组的最后一个维度(原始数组是[1,2,3]
,升级数组是[[1,2,3]]
)。与
最后,这里是一个具有更多维度的示例:
逗号分隔的ar光线是:
有形状元组的
[[1,2],[4,5],[10,11]]
有形状元组的
[7,8,9]
两个
arrays
都需要升级到4-dimensional arrays
。原始的array's
形元组需要从维度1开始。因此,对于第一个数组,形状变为
(1,3,2,1)
,因为3,2
从维度1开始,并且因为需要添加两个1s使其4-dimensional
一个1放在原始形状元组之前,一个1放在之后。使用相同的逻辑,第二个数组的形状元组变成
(1,3,1,1)
。现在需要使用维度2作为连接轴来连接这两个
arrays
。从每个数组的升级形状元组中删除维度2会导致这两个元组的元组都是(1,3,1)
。由于得到的元组是相同的,所以可以将数组连接起来,并对连接的轴求和,以生成(1, 3, 2+1, 1) == (1, 3, 3, 1)
。'n,m'
告诉r_
沿axis=n
连接,并生成至少具有m
维度的形状:所以我们沿着轴=0连接,因此我们通常希望结果具有形状
(6,)
,但是由于m=2
,我们告诉r_
形状必须至少是二维的。所以我们得到的是形状(2,3)
:看看当我们增加
m
时会发生什么:使用
r_
可以做的任何事情都可以使用一个更可读的数组构建函数来完成,例如np.concatenate
、np.row_stack
、np.column_stack
、np.hstack
、np.vstack
或np.dstack
,尽管它可能还需要调用reshape
。即使调用Reforme,这些其他功能也可能更快:
相关问题 更多 >
编程相关推荐