0
votes

Effectuer un fonctionnement mathématique sur des éléments de matrice spécifiques à l'aide de vecteurs d'index

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


0 commentaires

3 Réponses :


0
votes
import numpy as np

myarr = np.random.randint(2,size=[10,10,10]).astype(float)
someValue  = 3
myarr[myarr>0] = myarr[myarr>0]/someValue

1 commentaires

Merci beaucoup!



0
votes

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]


1 commentaires

Merci beaucoup!



0
votes

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


1 commentaires

Merci beaucoup!