我是Python和numpy的新手。我已經想出瞭如何分割1維:arr[atart:end]
,並訪問數組中的元素:el = arr[row][col]
。Python:切分多維數組
嘗試像slice = arr[0:2][0:2]
(其中arr
是一個numpy數組)不會給我前2行和列,但會重複前2行。我剛剛做了什麼,如何切入另一個維度?
我是Python和numpy的新手。我已經想出瞭如何分割1維:arr[atart:end]
,並訪問數組中的元素:el = arr[row][col]
。Python:切分多維數組
嘗試像slice = arr[0:2][0:2]
(其中arr
是一個numpy數組)不會給我前2行和列,但會重複前2行。我剛剛做了什麼,如何切入另一個維度?
如果使用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數組,但與我上面發佈的「本機」解決方案相比,它會變慢。
中的類型所以,'arr [0:2] [0:2]'與'arr [row] [col]'相比實際做了什麼? – SlightlyCuban
@SlightlyCuban - 查看我更新的答案。 – mgilson
@mgilson我厭倦了這一點,並得到了一些相當奇怪的結果。假設我有'a = [[1,2,3],[4,5,6],[7,8,9]]然後'a [0] [:] = [1,2,3]'但奇怪的是'a [:] [0]'仍然是'[1,2,3]'。我會說這應該是'[1,4,7]'。如果你能告訴我這裏有什麼問題,我將不勝感激。 –
什麼數據類型是'arr'?這是一個列表清單嗎? – mgilson
@mgilson我更新了問題 – SlightlyCuban