J'ai un tableau data_set, size: (172800,3) et un tableau de masques, size (172800) se compose de 1 et de 0. Je voudrais remplacer la forme de valeur tableau data_set basé sur les valeurs (0 ou 1) dans le tableau de masque par la valeur définie par moi: ex: [0,0,0] ou [128,16,128].

J'ai essayé la fonction "np.placed" mais ici le problème est la taille incorrecte du tableau de masques.

J'ai également vérifié la manière la plus pythonique: data_set [mask] = [0,0,0] cela a bien fonctionné mais pour une raison seulement pour les 2 premiers éléments.

data_set[mask]= [0,0,0]

data_set = np.place(data_set, mask, [0,0,0])

Ma sortie attendue est de changer la valeur de l'élément dans la matrice data_set en [0,0,0] si la valeur du masque est 1.

ex.

data_set = [[134,123,90] , [234,45,65] , [32,233,45]]
mask = [ 1, 0, 1]

output = [[0,0,0] , [234, 45,65] , [0,0,0]]
0
donchuan 3 nov. 2019 à 18:31

1 réponse

Utilisez des tableaux booléens pour indexer vos données:

import numpy as np

data_set = np.array([[134,123,90] , [234,45,65] , [32,233,45]])
mask = np.array([True, False, True])
val = np.zeros(data_set.shape[1])
data_set[mask,:] = val

Notez comment mask ici est une séquence de booléens au lieu d'entiers.

Si vous avez une liste d'entiers existante, vous pouvez utiliser

data_set[mask.astype(bool),:] = val
# or
data_set[np.where(mask),:] = val

Le premier convertit votre tableau d'ints en un tableau de bools, tandis que le second crée une liste d'index où le masque n'est pas nul.

Vous pouvez définir val sur la valeur dont vous avez besoin tant qu'elle correspond à la deuxième dimension de l'ensemble de données (dans ce cas, 3).

0
Aleon 3 nov. 2019 à 15:54