Ant*_*nio 7 python arrays numpy
我有一个像这样的numpy数组:
candidates =
array([[1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0],
[0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1],
[1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)
我不明白有什么区别candidates[0]
:
candidates[0] =
array([1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0]
candidates[0].shape = (34,)
Run Code Online (Sandbox Code Playgroud)
而且candidates[0:1]
:
candidates[0:1] =
array([[1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0,
0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0]])
candidates[0:1].shape = (1, 34)
Run Code Online (Sandbox Code Playgroud)
因为我相信两者应该给出完全相同的结果?我的意思是后者ie candidates[0:1]
应该只代表第一个元素,对吗?那么,这两者究竟有什么区别?
在Python,[0]
是索引 -它返回第一元件,而[0:1]
被切片 -它返回所有的第一1个元件的集合.
使用普通的旧列表可能更容易看到:
>>> lst = [1, 2, 3]
>>> lst[0]
1
>>> lst[0:1]
[1]
Run Code Online (Sandbox Code Playgroud)
Numpy扩展了Python索引和切片,其中一些会给你一个2D结果,出于不同的原因 - 例如,你可以[0]
像一个"类似数组"索引,它可以作为一个索引数组),但相关的基础知识是和这里一样.对于2D numpy数组,元素是行,因此candidates[0]
是第一行 - 一维数组,candidates[0:1]
而是所有前1行 - 一个2D数组的数组.所以第一个有形状(34,)
,第二个有形状(1, 34)
.
如果你不仔细观察,差异可能并不明显,但比较两者的开始:
array([1,
array([[1,
Run Code Online (Sandbox Code Playgroud)
它们没有排成一行,因为第二个有两个括号而不是一个,这是因为它是一个2D数组而不是一维.