假設(shè)我有一個numpy矩陣:并且有我需要的位置,從中值:。data = np.random.rand(200, 50, 100)locs = np.random.randint(50, size=(200, 2))如何獲得生成的形狀矩陣?從本質(zhì)上講,我想從 指定的位置獲取值。(200, 2, 100)datalocs如果我這樣做:,我最終會得到一個形狀的矩陣,而不是。data[locs](200, 2, 50, 100)(200, 2, 100)根據(jù)要求更新了更多詳細(xì)信息:如果我們有:data = np.arange(125)reshaped = np.reshape(data, (5, 5, 5))locs = [[3, 4], [2, 1], [1, 3], [3, 3], [0, 0]]然后執(zhí)行類似操作應(yīng)給出以下輸出:data[locs]array([[[ 15, 16, 17, 18, 19], [ 20, 21, 22, 23, 24]], [[ 35, 36, 37, 38, 39], [ 30, 31, 32, 33, 34]], [[ 55, 56, 57, 58, 59], [ 65, 66, 67, 68, 69]], [[ 90, 91, 92, 93, 94], [ 90, 91, 92, 93, 94]], [[100, 101, 102, 103, 104], [100, 101, 102, 103, 104]]])
1 回答

Smart貓小萌
TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個贊
高級索引的結(jié)果將是索引沿要編制索引的維度的索引形狀。 等價于 ,因此您的形狀將是 、 或 。data[locs]data[locs, :, :]locs.shape + data.shape[1:](200, 2, 50, 100)
您似乎要求的是索引使用軸 1,使軸 0 與 中的行保持同步。為此,您需要沿軸 1 編制索引,并在軸零中提供從 0 到 200 的索引。datalocslocslocs
重要的是要記住,所有高級索引必須廣播到相同的形狀。由于是成形的,第一個索引必須成形或正確廣播。我將展示前者,因?yàn)樗唵危行?。locs(200, 2)(200, 1)(200, 2)
data = np.random.rand(200, 50, 100)
locs = np.random.randint(50, size=(200, 2))
rows = np.arange(200).reshape(-1, 1)
result = data[rows, locs, :]
添加回答
舉報
0/150
提交
取消