我有一个三维 numpy 数组,其中存储了 0
和 1
:
g = np.array([[[0, 1], [0, 1], [1, 0]], [[0, 0], [1, 0], [1, 1]]])
# array([
# [[0, 1], [0, 1], [1, 0]],
# [[0, 0], [1, 0], [1, 1]]])
我想使用一种逐行替换的策略,将这些值替换为另一个数组中的值。例如,用x
替换g
的值:
x = np.array([[2, 3], [4, 5]])
array([[2, 3],
[4, 5]])
获取:
array([
[[2, 3], [2, 3], [3, 2]],
[[4, 4], [5, 4], [5, 5]]])
这里的想法是将g
的第一行替换为x
的第一个元素(0
变为2
,1
变为3
),并对另一行执行相同操作(第一维——“行”数——始终对g
和x
相同)。
我似乎无法使用np.where
,因为出现了ValueError: operands could not be broadcast together with shapes (2,3,2) (2,2) (2,2)
。
np.stack([x[i, g[i]] ...
则需要约6毫秒,而列表推导式则需要约14.5毫秒。 - cglacet