我具有的值的例如廣播高級索引numpy的
x = array([[[-0.78867513, -0.21132487, 0. , 0.78867513, 0.21132487, 0. , 0. , 0. , 0. ],
[ 0. , -0.78867513, -0.21132487, 0. , 0.78867513, 0.21132487, 0. , 0. , 0. ],
[ 0. , 0. , 0. , -0.78867513, -0.21132487, 0. , 0.78867513, 0.21132487, 0. ],
[ 0. , 0. , 0. , 0. , -0.78867513, -0.21132487, 0. , 0.78867513, 0.21132487]],
[[-0.78867513, -0.21132487, 0. , 0.78867513, 0.21132487, 0. , 0. , 0. , 0. ],
[ 0. , -0.78867513, -0.21132487, 0. , 0.78867513, 0.21132487, 0. , 0. , 0. ],
[ 0. , 0. , 0. , -0.78867513, -0.21132487, 0. , 0.78867513, 0.21132487, 0. ],
[ 0. , 0. , 0. , 0. , -0.78867513, -0.21132487, 0. , 0.78867513, 0.21132487]]])
我想在使用高級索引拉出非零值的數組。我知道非零值的索引,從而
idx = array([[4, 3, 1, 0],
[5, 4, 2, 1],
[7, 6, 4, 3],
[8, 7, 5, 4]])
期望的結果會是這樣的
x[idx] = array([[[-0.78867513, -0.21132487, 0.78867513, 0.21132487],
[-0.78867513, -0.21132487, 0.78867513, 0.21132487],
[-0.78867513, -0.21132487, 0.78867513, 0.21132487],
[-0.78867513, -0.21132487, 0.78867513, 0.21132487]],
[[-0.78867513, -0.21132487, 0.78867513, 0.21132487],
[-0.78867513, -0.21132487, 0.78867513, 0.21132487],
[-0.78867513, -0.21132487, 0.78867513, 0.21132487],
[-0.78867513, -0.21132487, 0.78867513, 0.21132487]]])
實際x
陣列是沿着第一維度大得多,但非零結構總是由指示idx
所以我需要它沿着第一個維度進行廣播。這可能嗎?
編輯:要清楚x
沿着第一維包含嵌套列表4 x 9
數組。 idx
然後具有非零的行逐行。請注意,在x
的4 x 9
嵌套數組的第一行中,第一行的4 3 1 0
條目不爲零。
目前還不清楚'idx'是如何涉及哪些元素是非零的。 – user2357112
添加和編輯以澄清。 – johntfoster
沿'idx'第二軸的元素的順序是否有任何意義?我會期望您所需輸出的元素以不同的順序排列。另外,是否可以保證'x'的結構是這樣的:'idx'不需要鋸齒? – user2357112