Je veux effectuer une opération facile sur des éléments spécifiques sur un ensemble de données 3D basé sur un masque 3D (contenant des zéros). L'opération que je veux faire est la division et, étant donné que je ne veux pas introduire Nan à mon ensemble de données, je veux seulement effectuer la division sur des éléments à l'intérieur du masque. En outre, je vais faire cela sur un ensemble de données volumineux avec de nombreuses grosses matrices, donc je veux éviter les boucles aussi longtemps que possible.
Voici un code: P>
for i in range(0,97442): row = inside_mask[0][i] col = inside_mask[1][i] depth = inside_mask[2][i] someValue = valueMatrix[row, col, depth] calculation[row, col, depth] = signal_data[row, col, depth]/someValue
3 Réponses :
import numpy as np myarr = np.random.randint(2,size=[10,10,10]).astype(float) someValue = 3 myarr[myarr>0] = myarr[myarr>0]/someValue
Merci beaucoup!
Vous pouvez utiliser une indexation logique.
Exemple: P>
# Build input: signal_data = np.ones((3, 3, 3))*2 valueMatrix = signal_data.copy() valueMatrix[0, 0, 0] = 0 valueMatrix[0, 0, 1] = 0 valueMatrix[0, 1, 0] = 0 valueMatrix[1, 0, 0] = 0 mask_data = valueMatrix # Calculation: above_zero = mask_data > 0 calculation = signal_data.copy() calculation[above_zero] = signal_data[above_zero] / valueMatrix[above_zero]
Merci beaucoup!
Faire un échantillon tableau 2D:
In [71]: data = np.random.randint(0,3,(3,4)).astype(float) In [72]: data Out[72]: array([[1., 0., 0., 2.], [1., 0., 1., 2.], [0., 2., 2., 1.]]) In [73]: np.divide(1, data, where=data>0, out=data) Out[73]: array([[1. , 0. , 0. , 0.5], [1. , 0. , 1. , 0.5], [0. , 0.5, 0.5, 1. ]])
Merci beaucoup!