[英]Slicing a numpy array vs selecting a single element
我有一個數組:
arr = np.array([[1,2,3], [4,5,6], [7,8,9]])
如果我將數組arr[:, :1]
切片,我的結果是array([[1], [4], [7]])
。
如果我將數組arr[:, 0]
切片,我的結果是array([1, 4, 7])
。
為什么有區別?
:1
是一個切片(恰好長度為1),因此numpy返回數組中每一行的列表(第一暗)。 這就是為什么要得到一個二維數組的原因:您要求帶有:
的子數組。
另一方面,索引是0
,因此numpy會將結果縮小1維,從而得到一列值(更精確地說是1維數組)。
https://docs.scipy.org/doc/numpy-1.14.2/user/basics.indexing.html#single-element-indexing
聲稱單元素索引的行為類似於通常的Python列表索引。 切片也遵循這種模式
In [175]: arr = np.arange(6).reshape(2,3)
In [176]: arr
Out[176]:
array([[0, 1, 2],
[3, 4, 5]])
單元素索引-返回一維數組
In [177]: arr[1,:]
Out[177]: array([3, 4, 5])
切片索引返回二維數組
In [178]: arr[:1,:]
Out[178]: array([[0, 1, 2]])
帶有等效列表
In [179]: alist = arr.tolist()
單元素索引將返回一個列表:
In [180]: alist[1]
Out[180]: [3, 4, 5]
切片索引返回嵌套列表:
In [181]: alist[:1]
Out[181]: [[0, 1, 2]]
當我索引一維數組或數字列表時,也存在相同的模式。
numpy
將其推廣到列和更高維度,但嘗試保持模式相同。
In [187]: arr[:,0]
Out[187]: array([0, 3])
In [188]: arr[:,:1]
Out[188]:
array([[0],
[3]])
In [189]: [x[0] for x in alist]
Out[189]: [0, 3]
In [190]: [x[:1] for x in alist]
Out[190]: [[0], [3]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.