J'essaie de vectoriser ce processus. J'ai une matrice 4x4x4. J'essaie de multiplier la valeur dans [i,0,num[i]] par le multiplicateur i où i est l'intervalle(data.shape[0]) et de placer le résultat dans [i,0,num[i]]. J'essaie de comprendre comment vectoriser cela. Je ne peux le faire que dans une boucle. J'espère que le code aura plus de sens. Le code n'est pas correct, mais je pense que j'en suis proche.
import numpy as np
data = np.array([[[ 2., 2., 2., 2.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 1., 1., 1., 1.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 3., 3., 3., 3.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]],
[[ 5., 5., 5., 5.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]]])
num = np.array([1, 2, 2, 3])
multipler = np.array([0.5, 0.6, 0.2, 0.3])
data[:, 1, num] = multipler * data[:, 0, num]
data[:, 2, num] = data[:, 0, num] - data[:, 1, num]
print(data) # This is the goal output
[[[2. 2. 2. 2. ]
[0. 1. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 0. 0. ]]
[[1. 1. 1. 1. ]
[0. 0. 0.6 0.]
[0. 0. 0.4 0.]
[0. 0. 0. 0. ]]
[[3. 3. 3. 3. ]
[0. 0. 0.6 0.]
[0. 0. 2.4 0.]
[0. 0. 0. 0. ]]
[[5. 5. 5. 5. ]
[0. 0. 0. 1.5]
[0. 0. 0. 3.5]
[0. 0. 0. 0. ]]]