[英]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.