在numpy' documents中:
>>> np.r_['0,2,0', [1,2,3], [4,5,6]]
array([[1],
[2],
[3],
[4],
[5],
[6]])
字符串中的第三个数字是什么意思' 0,2,0'?
答案 0 :(得分:1)
我还没有使用r_
的字符串参数;对我来说,直接使用concatanate
及其variantes更容易。
但是看看文档:
具有三个以逗号分隔的整数的字符串允许指定 轴要连接,要强制的最小维数 条目,以及哪个轴应包含数组的开头 小于指定的维数。
'0.2.0'
axis = 0
make it 2d
start with 0d
In [79]: np.r_['0,2,0', [1,2,3], [4,5,6]]
Out[79]:
array([[1],
[2],
[3],
[4],
[5],
[6]])
连接等效
In [80]: np.concatenate(([1,2,3], [4,5,6]))
Out[80]: array([1, 2, 3, 4, 5, 6])
In [81]: np.concatenate(([1,2,3], [4,5,6]))[:,None]
Out[81]:
array([[1],
[2],
[3],
[4],
[5],
[6]])
这里我在轴= 0上连接,并在连接后扩展到2d。但听起来r_
首先扩展元素的维度(但我们可以仔细检查代码)。
In [83]: alist = ([1,2,3], [4,5,6])
In [86]: [np.expand_dims(a,1) for a in alist]
Out[86]:
[array([[1],
[2],
[3]]), array([[4],
[5],
[6]])]
In [87]: np.concatenate(_, axis=0)
Out[87]:
array([[1],
[2],
[3],
[4],
[5],
[6]])
我使用expand_dims
制作输入2 d,并在第一个之后添加新尺寸。完成后我可以在轴0上连接。
请注意r_
的输入可能已经是2d,如:
np.r_['0,2,0',[1,2,3], [[4],[5],[6]]]
np.r_['0,2,0',[1,2,3], np.expand_dims([4,5,6],1)]
np.r_['0,2,0',[1,2,3], np.atleast_2d([4,5,6]).T]
3d数字(如果为1)将组件转换为
In [105]: np.atleast_2d([4,5,6])
Out[105]: array([[4, 5, 6]])
In [103]: np.r_['0,2,1',[1,2,3],[4,5,6]]
Out[103]:
array([[1, 2, 3],
[4, 5, 6]])
通常,如果文档不清楚,我想深入研究代码,或尝试替代输入。
In [107]: np.r_['1,2,1',[1,2,3], [4,5,6]]
Out[107]: array([[1, 2, 3, 4, 5, 6]])
In [108]: np.r_['1,2,0',[1,2,3], [4,5,6]]
Out[108]:
array([[1, 4],
[2, 5],
[3, 6]])
查看代码,我看到它使用
array(newobj, copy=False, subok=True, ndmin=ndmin)
将组件扩展到所需的ndmin
。 3d数字用于构造transpose
参数。细节很混乱,但效果如下:
In [111]: np.array([1,2,3], ndmin=2)
Out[111]: array([[1, 2, 3]])
In [112]: np.array([1,2,3], ndmin=2).transpose(1,0)
Out[112]:
array([[1],
[2],
[3]])
答案 1 :(得分:0)
答案 2 :(得分:0)
'0,2,0'是三个逗号分隔的字符串。与numpy.r_一起使用时,每个元素分别指定:
对于第三个元素,您有两个选择:
如果使用0
或正整数,则指定原始形状元组应在数组的升级形状元组的维中的何处开始。例如,0
表示原始形状元组应从升级形状元组的尺寸0
开始。
如果使用负数,则负号后的整数指定原始形状元组应在数组升级形状元组的维中的何处结束。例如,-1
表示原始形状元组应在升级形状元组的最后一个维度结束。 -2
表示相同,但倒数第二个。
最后,将以上内容应用于您的示例。
np.r_['0,2,0', [1,2,3], [4,5,6]]
上面包含两个数组。每个都有一个维度(3,)
,这意味着它们都是一维数组。逗号分隔的整数字符串中的第二个元素是2
,这意味着每个数组的维数至少应为2
。由于两个数组都是一维的,因此它们都需要在其形状元组中增加一个维。逗号分隔的整数字符串中的第三个元素是0
,这意味着原始形状元组(两个数组均为(3,)
)需要从形状元组的维度0
开始升级的阵列。这是通过在原始形状元组的末尾添加1
来实现的。这会将两个数组都升级为具有(3,1)
形状的元组。现在,由于逗号分隔的整数字符串的第一个元素是0
,因此将使用维度0
作为连接轴来连接升级后的数组。这意味着,如果为两个升级后的阵列预留了维度0
,则其余维度必须相同。在此示例中,如果在两个升级的阵列中都未设置维度0
,则仅保留维度1
,并且对于两个升级的阵列,维度1
的值为1
。因此,当连接两个升级的数组时,结果将具有(3 + 3,1)==(6,1)的形状元组,其形状为
array([[1],
[2],
[3],
[4],
[5],
[6]])