簡體   English   中英

Numpy數組索引與索引

[英]Numpy array indexing with indices

我寫了以下內容:

arr3=np.array([[[1,2,3],[1,2,3],[1,2,3],[1,2,3]],[[2,2,3],[4,2,3],[4,2,2],[2,2,2]],[[1,1,1],[1,1,1],[1,1,1],[1,1,1]]])

正如我所料,
arr3[0:3,1]應該返回相同的結果
arr3[0:3][1]array([[2, 2, 3],[4, 2, 3],[4, 2, 2],[2, 2, 2]]) arr3[0:3][1] array([[2, 2, 3],[4, 2, 3],[4, 2, 2],[2, 2, 2]])

但它返回: array([[1, 2, 3],[4, 2, 3],[1, 1, 1]])

順便說一下,我在Jupyter筆記本中使用python3

在執行arr3[0:3,1] ,您將從第一個axis中的0:3獲取元素,然后在第一個element獲取每個element

這給出了一個不同的結果取0:3與在第一軸線arr3[0:3]然后以第一array從該axis

所以在這種情況下, 0:3部分在任何一種情況下都不起作用,因為array's形狀是(3, 4, 3)所以取first 3只是給你回到相同的array 在第二種情況下,這絕對沒有任何作用,但在第一種情況下,它確實充當了占位符,以便您可以訪問第二個axis ,但為此您應該只使用冒號: [:, some_index]

看看它的array怎樣的?

>>> arr3[0:3]
array([[[1, 2, 3],
        [1, 2, 3],
        [1, 2, 3],
        [1, 2, 3]],

       [[2, 2, 3],
        [4, 2, 3],
        [4, 2, 2],
        [2, 2, 2]],

       [[1, 1, 1],
        [1, 1, 1],
        [1, 1, 1],
        [1, 1, 1]]])

但是當你執行arr3[:, 1]你從array第二個 axis獲取第二個元素,這樣就可以得到:

array([[1, 2, 3],
       [4, 2, 3],
       [1, 1, 1]])

而在另一種情況下,你從數組的第一個 axis獲取第二個元素,所以:

array([[2, 2, 3],
       [4, 2, 3],
       [4, 2, 2],
       [2, 2, 2]])

要進一步閱讀有關numpy indexing ,請查看this page on scipy上的this page on scipy

請注意這個直接適用於您的問題的具體描述:

當索引中至少有一個切片(:) ,省略號(...)np.newaxis (或者數組的維度多於高級索引)時,行為可能會更復雜。 這就像連接每個高級索引元素的索引結果一樣

讓我們看看我們的多維numpy數組:

import numpy as np
arr3=np.array([
    [
        [1,2,3],[1,2,3],[1,2,3],[1,2,3]
    ],[
        [2,2,3],[4,2,3],[4,2,2],[2,2,2]
    ],[
        [1,1,1],[1,1,1],[1,1,1],[1,1,1]
    ]
])
print(arr3[0:3,1])

返回:

[[1 2 3]
 [4 2 3]
 [1 1 1]]

這是有道理的,因為我們正在獲取行號1到3,我們只抓取第一列。

但是, arr3[0:3][1]將數組從第0行返回到第3行,然后選擇第二行(或行索引1)。

注意:

print(arr3[0:3])

返回:

[[[1 2 3]
  [1 2 3]
  [1 2 3]
  [1 2 3]]

 [[2 2 3]
  [4 2 3]
  [4 2 2]
  [2 2 2]]

 [[1 1 1]
  [1 1 1]
  [1 1 1]
  [1 1 1]]] 

它返回一個新數組(恰好與我們當前的數組相同,因為我們只詢問了數組中的所有行)。 然后我們要求第二行:

print(arr3[0:3][1])

返回:

[[2 2 3]
 [4 2 3]
 [4 2 2]
 [2 2 2]]

暫無
暫無

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

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