Numpy 切片多维错误产生意外结果
Numpy slicing multidimensional error produces unexpected result
我有一个这种形状的多维数组:
(2, 200, 2, 3, 3, 114)
我想使用以下命令从中提取一组特定的值:
pab[0][:][0][0][0][i]
所以基本上我需要在第二个维度上迭代每个值来修复第一、第三、第四和第五中的值。最后一个维度在循环中。
但是,我的切片方式和想要在二维上提取的方式似乎无法正常工作。经过一番调查后,我发现形状并没有像预期的那样改变。看来我没有理解正确:
>>> pab.shape
(2, 200, 2, 3, 3, 114)
>>> pab[0].shape
(200, 2, 3, 3, 114)
>>> pab[0][:].shape
(200, 2, 3, 3, 114)
>>> pab[0][:][0].shape
(2, 3, 3, 114) # I would have expected to see (200, 3, 3, 114)
>>> pab[0][:][0][0].shape
(3, 3, 114)
我发现一些文章谈论多维切片,但其中 none 解释了这种行为,或者我误解了它们。
如果有人能解释为什么数组的形状会如图所示发生变化而不是 (200, 3, 3, 114)
的预期,以及正确的方法是什么,我将不胜感激!最后我试图获得一个形状数组 (200, )
索引 numpy
与 arr[i][j]...
适用于所有标量,但不适用于切片。 [:]
什么都不做。 (即使有一个列表 [:]
也只是制作一个副本。)。所以你想将索引组合成一个表达式:
In [40]: arr = np.ones((2, 200, 2, 3, 3, 114),int)
In [41]: arr.shape
Out[41]: (2, 200, 2, 3, 3, 114)
In [42]: arr[0].shape
Out[42]: (200, 2, 3, 3, 114)
In [43]: arr[0,:,0,0].shape
Out[43]: (200, 3, 114)
In [44]: arr[0,:,0,0,0,3].shape
Out[44]: (200,)
像这样将切片放在中间会产生意想不到的结果:
In [45]: arr[0,:,0,0,0,[1,2]].shape
Out[45]: (2, 200)
In [47]: arr[0][:,0,0,0,[1,2]].shape
Out[47]: (200, 2)
此处大小为 200 的切片已移至末尾。这是混合基本索引和高级索引的尴尬情况。 https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#combining-advanced-and-basic-indexing
我有一个这种形状的多维数组:
(2, 200, 2, 3, 3, 114)
我想使用以下命令从中提取一组特定的值:
pab[0][:][0][0][0][i]
所以基本上我需要在第二个维度上迭代每个值来修复第一、第三、第四和第五中的值。最后一个维度在循环中。
但是,我的切片方式和想要在二维上提取的方式似乎无法正常工作。经过一番调查后,我发现形状并没有像预期的那样改变。看来我没有理解正确:
>>> pab.shape
(2, 200, 2, 3, 3, 114)
>>> pab[0].shape
(200, 2, 3, 3, 114)
>>> pab[0][:].shape
(200, 2, 3, 3, 114)
>>> pab[0][:][0].shape
(2, 3, 3, 114) # I would have expected to see (200, 3, 3, 114)
>>> pab[0][:][0][0].shape
(3, 3, 114)
我发现一些文章谈论多维切片,但其中 none 解释了这种行为,或者我误解了它们。
如果有人能解释为什么数组的形状会如图所示发生变化而不是 (200, 3, 3, 114)
的预期,以及正确的方法是什么,我将不胜感激!最后我试图获得一个形状数组 (200, )
索引 numpy
与 arr[i][j]...
适用于所有标量,但不适用于切片。 [:]
什么都不做。 (即使有一个列表 [:]
也只是制作一个副本。)。所以你想将索引组合成一个表达式:
In [40]: arr = np.ones((2, 200, 2, 3, 3, 114),int)
In [41]: arr.shape
Out[41]: (2, 200, 2, 3, 3, 114)
In [42]: arr[0].shape
Out[42]: (200, 2, 3, 3, 114)
In [43]: arr[0,:,0,0].shape
Out[43]: (200, 3, 114)
In [44]: arr[0,:,0,0,0,3].shape
Out[44]: (200,)
像这样将切片放在中间会产生意想不到的结果:
In [45]: arr[0,:,0,0,0,[1,2]].shape
Out[45]: (2, 200)
In [47]: arr[0][:,0,0,0,[1,2]].shape
Out[47]: (200, 2)
此处大小为 200 的切片已移至末尾。这是混合基本索引和高级索引的尴尬情况。 https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#combining-advanced-and-basic-indexing