用(m,n,1)数组中的条件替换(m,n,3)数组中的值

时间:2019-04-15 18:05:33

标签: python numpy

假设我有以下数组:

a = np.random.randint(5, size=(2000, 2000, 1))
a = np.repeat(a, 3, axis=2) # Using this method to have a (m,n,3) array with the same values

和下一个数组:

val_old = np.array([[0,  0,   0],  [3,  3,  3]])
val_new = np.array([[12, 125, 13], [78, 78, 0]])

我想要做的是用数组a中指定的值替换数组val_new中的值。因此,所有[0,0,0]数组都将变成[12,125,13],所有[3,3,3]都将变成[78, 78, 0]

我找不到有效的方法来执行此操作...我尝试改编this solution,但这仅适用于一维数组...

有人知道替换这些值的快速方法/方法吗?

1 个答案:

答案 0 :(得分:1)

假设每个整数都有一个“映射”,则可以在(5,)数组上使用(2000,2000)索引广播到(2000,2000,5)数组。例如:

val_new = np.array([[12, 125, 13], [0,0,0], [1,3,3], [78, 78, 0]])  #0, 1, 2, 3
a = np.random.randint(4,size=(4,5))

val_new[a]  # (4,5,3) shaped array

>>array([[[  0,   0,   0],
    [ 78,  78,   0],
    [ 78,  78,   0],
    [ 12, 125,  13],
    [  0,   0,   0]],
....
   [[ 12, 125,  13],
    [ 12, 125,  13],
    [  0,   0,   0],
    [ 12, 125,  13],
    [  0,   0,   0]]])