簡體   English   中英

numpy數組切片,為什么有時2-d數組,有時是1-d數組

[英]numpy array slicing, why sometimes 2-d array and sometimes 1-d array

我的問題是關於numpy中的數組切片。 以下行為的邏輯是什么?

x = arange(25)
x.shape = (5, 5)
# This results in a 2-d array in which rows and columns are excerpted from x
y = x[0:2, 0:2]
# But this results in a 1-d array
y2 = x[0:2, 0]

我希望y2是一個二維數組,其中包含第0行和第0列第0列的值。

您可以使用x[0:2, 0:1]獲得預期的行為,即使用單個項目切片。 但是,只要選擇了單個元素,該尺寸就會折疊。 你可能不喜歡它,但如果你想一點,你應該意識到它是最一致的行為:遵循你的邏輯, x[0, 0]將是1行1列的2d數組,而不是存儲在該位置的項目。

這遵循標准的Python約定。 看看這些類似表達式的結果:

>>> a = [0, 1, 2, 3, 4, 5]
>>> a[4]
4
>>> a[4:5]
[4]

如您所見,一個返回一個項目 ,另一個返回包含一個項目的列表 這總是python的工作方式,而numpy只是遵循這個約定,但是更高的維度。 無論何時傳遞切片而不是單個項目,都會返回一個列表; 即使列表中沒有項目也是如此,因為結束索引太低,或者因為起始索引太高:

>>> a[4:4]
[]
>>> a[6:6]
[]

因此,在所有情況下,傳遞切片意味着“返回一個序列(沿着給定的維度)”,而傳遞整數則意味着“返回單個項目(沿着給定的維度)”。

使用單個元素而不是切片訪問數組時,它將折疊該維度。 因此,如果你有

x = arange(25)
y = x[10]

你會期望y10而不是array([10])

所以,如果你使用

y2 = x[0:2, 0]
print y2.shape
(2,)

它會破壞第二個維度。 如果要保留第二個維度,則需要使用切片訪問該維度。

y2 = x[0:2, 0:1]
print y2.shape
(2, 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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