2013-06-24 192 views
25

我是Python和numpy的新手。我已經想出瞭如何分割1維:arr[atart:end],並訪問數組中的元素:el = arr[row][col]Python:切分多維數組

嘗試像slice = arr[0:2][0:2](其中arr是一個numpy數組)不會給我前2行和列,但會重複前2行。我剛剛做了什麼,如何切入另一個維度?

+0

什麼數據類型是'arr'?這是一個列表清單嗎? – mgilson

+0

@mgilson我更新了問題 – SlightlyCuban

回答

33

如果使用numpy,這很容易:

slice = arr[:2,:2] 

,或者如果你想0的,

slice = arr[0:2,0:2] 

你會得到相同的結果。

*請注意,slice實際上是內建類型的名稱。通常,我會建議給你的對象一個不同的「名稱」。


另一種方式,如果你用列表的列表工作*:

slice = [arr[i][0:2] for i in range(0,2)] 

(注意0的位置是不必要的:[arr[i][:2] for i in range(2)]也將工作)。

我在這裏做的是,我一次取每個期望的第一行(arr[i])。然後,將我想要的列從該行切片並添加到我正在構建的列表中。

如果你天真地嘗試:arr[0:2]你得到的前2行,如果你再次切片arr[0:2][0:2],你只是將前兩行再次切片。

*這實際上也適用於numpy數組,但與我上面發佈的「本機」解決方案相比,它會變慢。

+0

中的類型所以,'arr [0:2] [0:2]'與'arr [row] [col]'相比實際做了什麼? – SlightlyCuban

+0

@SlightlyCuban - 查看我更新的答案。 – mgilson

+0

@mgilson我厭倦了這一點,並得到了一些相當奇怪的結果。假設我有'a = [[1,2,3],[4,5,6],[7,8,9]]然後'a [0] [:] = [1,2,3]'但奇怪的是'a [:] [0]'仍然是'[1,2,3]'。我會說這應該是'[1,4,7]'。如果你能告訴我這裏有什麼問題,我將不勝感激。 –