首页 > 解决方案 > 用另一个 numpy 数组的值逐行替换 numpy 数组

问题描述

我将0s 和1s 存储在一个 3 维 numpy 数组中:

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]]])

我想使用逐行替换策略将这些值替换为另一个数组中的值。例如,替换gby的值x

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( 0become21become ) 的第一个元素,并且另一行相同(第一维 - “行数” - 对于and3将始终相同)gx

我似乎无法使用np.where,因为有一个ValueError: operands could not be broadcast together with shapes (2,3,2) (2,2) (2,2).

标签: pythonnumpynumpy-ndarray

解决方案


国际大学联合会,

np.stack([x[i, g[i]] for i in range(x.shape[0])])

输出:

array([[[2, 3],
        [2, 3],
        [3, 2]],

       [[4, 4],
        [5, 4],
        [5, 5]]])

推荐阅读