簡體   English   中英

多維數組中的多元素索引

[英]Multiple Element Indexing in multi-dimensional array

我有一個3d Numpy數組,並且考慮來自其他兩個維度的某些元素,我想在一個軸上取均值。

這是一個描述我的問題的示例代碼:

import numpy as np
myarray = np.random.random((5,10,30))
yy = [1,2,3,4]
xx = [20,21,22,23,24,25,26,27,28,29]
mymean = [ np.mean(myarray[t,yy,xx]) for t in np.arange(5) ]

但是,這導致:

ValueError: shape mismatch: objects cannot be broadcast to a single shape

為什么索引像myarray [:,[1,2,3,4],[1,2,3,4]],但不是我上面的代碼?

這就是你喜歡多個維度的索引:

>>> np.mean(myarray[np.arange(5)[:, None, None], np.array(yy)[:, None], xx],
            axis=(-1, -2))
array([ 0.49482768,  0.53013301,  0.4485054 ,  0.49516017,  0.47034123])

當你使用花式索引,即列表或數組作為索引,在多個維度上,numpy將這些數組廣播到一個共同的形狀,並使用它們索引數組。 您需要在第一個索引數組的末尾添加長度為1的額外維度,以使廣播正常工作。 以下是游戲規則

由於您使用連續元素,您可以使用切片:

import numpy as np
myarray = np.random.random((5,10,30))
yy = slice(1,5)
xx = slice(20, 30)
mymean = [np.mean(myarray[t, yy, xx]) for t in np.arange(5)]

回答你的問題為什么它不起作用:當你使用列表/數組作為索引時,Numpy使用一組不同的索引語義,而不是使用切片。 您可以在文檔中看到完整的故事,正如該頁面所說,它“可能有些令人難以置信”。

如果您想為非連續元素執行此操作,則必須了解該復雜的索引機制。

暫無
暫無

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

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