JJJ*_*JJJ 2 python indexing numpy python-2.x
说:
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
Run Code Online (Sandbox Code Playgroud)
arr2d[:, :1] 给我
array([[1],
[4],
[7]])
Run Code Online (Sandbox Code Playgroud)
arr2d[:,0] 给我
array([1, 4, 7])
Run Code Online (Sandbox Code Playgroud)
我以为他们会产生完全相同的东西.
1)当你说arr2d[:, 0],你说的是给我arr2d中所有行的第0个索引(这是另一种说法给我第0列的方式).
2)当你说arr2d[:, :1],你说给我所有:1arr2d中所有行的索引.Numpy解释:1与解释相同0:1.因此,你说"对于每一行,给我每行的第0个到第一个索引(不包括").事实证明这只是第0个索引,但你明确要求第二个维度的长度为1(因为0:1只有"长度"一个).
所以:
1)
print arr2d[:, 0].shape
Run Code Online (Sandbox Code Playgroud)
输出:
(3L,)
Run Code Online (Sandbox Code Playgroud)
2)
print arr2d[:, 0:1].shape
Run Code Online (Sandbox Code Playgroud)
输出:
(3L, 1L)
Run Code Online (Sandbox Code Playgroud)
我还是不明白,他们为什么不回归同样的事情呢?
考虑:
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
Run Code Online (Sandbox Code Playgroud)
这输出:
[[1 2 3]
[4 5 6]
[7 8 9]]
(3L, 3L)
[[1 2]
[4 5]
[7 8]]
(3L, 2L)
[[1]
[4]
[7]]
(3L, 1L)
Run Code Online (Sandbox Code Playgroud)
对于最后一个形状来说,这将是一个意想不到的和不一致的(3L,).