![](/img/trans.png)
[英]get values from 3d arr by indexes stored in two 1d arr with different dimensions numpy
[英]Why do numpy array arr2d[:, :1] and arr2d[:, 0] produce different results?
说:
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2d[:, :1]
给了我
array([[1],
[4],
[7]])
arr2d[:,0]
给了我
array([1, 4, 7])
我以为他们会产生完全相同的东西。
1)当你说arr2d[:, 0]
,你说的是给我arr2d中所有行的第0个索引(这是另一种说法,给我第0列)。
2)当你说arr2d[:, :1]
,你说的是给我所有:1
arr2d中所有行的:1
索引。 Numpy解释:1
与解释0:1
。 因此,你说“对于每一行,给我每行的第0个到第一个索引(不包括”)。 事实证明这只是第0个索引,但你明确要求第二个维度的长度为1(因为0:1
只是“长度”一个)。
所以:
1)
print arr2d[:, 0].shape
输出:
(3L,)
2)
print arr2d[:, 0:1].shape
输出:
(3L, 1L)
我还是不明白,他们为什么不回归同样的事情呢?
考虑:
print arr2d[:, 0:3]
print arr2d[:, 0:3].shape
print arr2d[:, 0:2]
print arr2d[:, 0:2].shape
print arr2d[:, 0:1]
print arr2d[:, 0:1].shape
这输出:
[[1 2 3]
[4 5 6]
[7 8 9]]
(3L, 3L)
[[1 2]
[4 5]
[7 8]]
(3L, 2L)
[[1]
[4]
[7]]
(3L, 1L)
对于最后一个形状(3L,)
来说会有点出乎意料并且不一致。
使用列表,您具有与之相同的行为:
>>> a = [1, 2, 3, 4]
>>> a[0]
1
>>> a[:1]
[1]
numpy
的加入是axis
的引入,这使得它不那么直观。
在第一种情况下,您将返回特定索引处的项目,在第二种情况下,您将返回列表的一部分。
对于numpy
,对于前者,你选择第一列中返回一个轴数组的所有项目(比索引时预期的父项轴数少一个),但在第二种情况下,你'重新切片原始数组,结果仍然保留父数组的原始尺寸。
索引':1'
表示:
“从该项目的列表 index 0
至index 0
这显然是1个项目的列表”。
索引'0'
表示:
' index 0
处的项目'。
将其扩展到您的问题应该会使您获得的结果非常清晰。
arr2d[:, :1]
表示'对应于所有行的数据和列0到0'的列表。
所以结果是一个列表列表。
arr2d[:, 0]
表示'对应于所有行而只是第一列的数据'。
所以这只是一个清单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.