【发布时间】:2019-05-28 10:27:29
【问题描述】:
我有两个数组:
-
a: 一个 3 维源数组 (N x M x 2) -
b:包含 0 和 1 的二维索引数组 (N x M)。
我想使用b 中的索引在其第三维中选择a 的相应元素。结果数组的尺寸应为 N x M。以下是代码示例:
import numpy as np
a = np.array( # dims: 3x3x2
[[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15],
[16, 17]]]
)
b = np.array( # dims: 3x3
[[1, 1, 1],
[1, 1, 1],
[1, 1, 1]]
)
# select the elements in a according to b
# to achieve this result:
desired = np.array(
[[ 1, 3, 5],
[ 7, 9, 11],
[13, 15, 17]]
)
起初,我认为这一定有一个简单的解决方案,但我根本找不到。由于我想将它移植到 tensorflow,如果有人知道 numpy 类型的解决方案,我将不胜感激。
编辑:a 的第三个维度可能包含两个以上的元素。因此,b 也可能包含不同于 0 和 1 的索引 - 它不是布尔掩码。
【问题讨论】:
-
能否详细说明选择的逻辑?我看不出
b和最终结果之间有任何关系。 -
@ParitoshSingh 对于
b中(m, n)位置的每个元素x,输出数组在(m, n)位置应等于a[m, n, x]。
标签: python arrays numpy tensorflow