簡體   English   中英

切片numpy數組與選擇單個元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM