簡體   English   中英

在 Numpy / Scipy 中切片數組

[英]Slicing arrays in Numpy / Scipy

我有一個數組,如:

a = array([[1,2,3],[3,4,5],[4,5,6]])

從中切出只有前兩列“a”的 1x2 數組的最有效方法是什么?

IE

array([[2,3],[4,5],[5,6]]) in this case.

二維 numpy 數組使用a[i,j] (不是a[i][j] )進行索引,但是您可以對 numpy 數組和矩陣使用相同的切片符號,就像在 python 中使用普通矩陣一樣(只需將它們放入單個[] ):

>>> from numpy import array
>>> a = array([[1,2,3],[3,4,5],[4,5,6]])
>>> a[:,1:]
array([[2, 3],
       [4, 5],
       [5, 6]])

這是你要找的嗎?

a[:,1:]

引用文檔,基本的切片語法是i:j:k ,其中i是起始索引, j是停止索引, k是步長(當k > 0 )。

現在如果i沒有給出,如果k > 0 ,它默認為k > 0 否則,對於k < 0i默認為n - 1 (其中n是數組的長度)。

如果未給出j ,則默認為n (數組長度)。

那是一維數組。

現在二維數組是一個不同的野獸。 其切片語法是a[rowrange, columnrange]

因此,如果您想要所有行,但只想要最后兩列,就像您的情況一樣,您可以:

a[0:3, 1:3]

這里,“ [0:3] ”表示從0到3的所有行,“ [1:3] ”表示從第1列到第3列的所有列。

現在您可能想知道,即使您只有 3 列並且編號從 1 開始,它也必須返回 3 列,對嗎? 即:第 1 列、第 2 列、第 3 列

這是這個語法的棘手部分。 第一列實際上是第 0 列。所以當您說“ [1:3] ”時,您實際上是在說給我第 1 列和第 2 列。這是您想要的最后兩列。 (實際上沒有第 3 列。)

現在如果你不知道你的矩陣有多長,或者你想要所有的行,你可以把那部分留空。 IE

a[:, 1:3]

列也一樣。 即如果你想說,除了第一行之外的所有列,你會寫

a[0:1,:]

現在,上面的答案a[:,1:]是如何工作的,因為當你對列說“ [1:] ”時,這意味着給我除了第 0 列之外的所有內容,直到所有列的末尾。 即空意味着“直到最后”。

現在你必須意識到逗號兩邊的任何東西都是我上面第一次提到的一維情況的子集。 即如果你想使用步長指定你的行,你可以寫

a[::2,1]

在你的情況下哪個會返回

array([[2, 3],
       [5, 6]])

a[::2,1]闡明為:每隔一行給我,從最上面開始,只給我第二列。

這花了我一些時間才弄明白。 所以把它貼在這里,以防萬一它對某人有幫助。

暫無
暫無

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

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