假设我有以下数组:
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,但这仅适用于一维数组...
有人知道替换这些值的快速方法/方法吗?
答案 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]]])