簡體   English   中英

numpy數組整數索引在多個維度

[英]numpy array integer indexing in more than one dimension

我很確定我錯過了整數索引的東西,可以使用一些幫助。 假設我創建了一個2D數組:

>>> import numpy as np
>>> x=np.array(range(24)).reshape((4,6))
>>> x
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

然后,我可以選擇第1行和第2行:

>>> x[[1,2],:]
array([[ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17]])

或者第2行和第3行的第1列:

>>> x[[1,2],1]
array([ 7, 13])

因此,對我來說,我可以選擇第1行和第2行的第3,4和5列:

>>> x[[1,2],[3,4,5]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape

相反,我需要分兩步完成:

>>> a=x[[1,2],:]
>>> a
array([[ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17]])
>>> a[:,[3,4,5]]
array([[ 9, 10, 11],
       [15, 16, 17]])

來自R,我的期望似乎是錯誤的。 您能否確認一步確實無法做到這一點,或者建議更好的替代方案? 謝謝!

編輯:請注意我在示例中選擇的行和列恰好是連續的,但它們不一定是。 換句話說,切片索引不適用於我的情況。

您還可以選擇在索引數組中使用廣播,這是我通常會做的,而不是索引兩次,這會創建數據的中間副本:

>>> x[[[1], [2]],[[3, 4, 5]]]
array([[ 9, 10, 11],
       [15, 16, 17]])

為了更好地了解正在發生的事情以及如何處理更多的指數:

>>> row_idx = np.array([1, 2])
>>> col_idx = np.array([3, 4, 5])
>>> x[row_idx.reshape(-1, 1), col_idx]
array([[ 9, 10, 11],
       [15, 16, 17]])

像這樣的東西:

In [28]: x[1:3, 3:6]                                                                             
Out[28]: 
array([[ 9, 10, 11],
       [15, 16, 17]])

暫無
暫無

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

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