簡體   English   中英

Select 使用來自 numpy 中的 ndarray 的索引的多個 arrays

[英]Select using multiple arrays of indices from an ndarray in numpy

假設我有一個二維數組:

y = np.arange(35).reshape(5,7)
# 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, 24, 25, 26, 27],
#        [28, 29, 30, 31, 32, 33, 34]])

和 select 第一個、第三個和第五個數組的第二個和第三個元素,如下所示:

y[np.array([0,2,4]), 1:3]
# array([[ 1,  2],
#        [15, 16],
#        [29, 30]])

我找不到使用 arrays 代替索引切片的方法來復制它,以下方法不起作用,我必須能夠使用 arrays 進行索引,因為我有時可能對 ZA3CBC53F9D671D9CZ 的第二個和第四個元素感興趣很快:

y[np.array([0,2,4]), np.array([1,2])]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,)

如何實現我想要的功能?

np.ix_() 專為此類問題而設計。

def getSub():
    y = np.arange(35).reshape(5,7)
    locs = np.ix_([0,2,4],[1,2])
    return y[locs]


>>> getSub()
array([[ 1,  2],
       [15, 16],
       [29, 30]])

y[np.array([0,2,4]), np.array([[1],[2]])].T

你可以嘗試使用這個y[np.array([[0,2,4]]*2),np.array([[1]*3,[2]*3])].T

通過雙索引實現它的快速、骯臟的方法。

y[np.array([0,2,4]),:][:,np.array([1,2])]

暫無
暫無

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

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