【发布时间】:2015-06-25 02:11:48
【问题描述】:
例如,我有一个值数组
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与哪些元素非零相关。 -
添加和编辑澄清。
-
元素沿
idx第二轴的顺序有什么意义吗?我本来希望您所需输出的元素以不同的顺序排列。另外,是否保证x的结构不会使idx呈锯齿状? -
是的,它们应该是有序的,所以 +/- 符号应该有变化。抱歉弄错了
-
另外,
idx永远不会是锯齿状的,永远是矩形的。