Existe-t-il de toute façon de prendre une colonne d'un tableau numpy et chaque fois que la valeur absolue est supérieure à un nombre, définissez la valeur sur ce nombre signé.

C'est à dire.

for val in col:
    if abs(val) > max:
        val = (signed) max

Je sais que cela peut être fait en boucle et autres, mais je me demandais s'il y avait un moyen plus propre / intégré de le faire.

Je vois qu'il y a quelque chose comme

arr[arr > 255] = x

C'est en quelque sorte ce que je veux, mais je veux le faire par colonne au lieu de l'ensemble du tableau. En prime, peut-être un moyen de faire des valeurs absolues au lieu d'avoir à faire deux opérations distinctes pour le positif et le négatif.

0
learningthemachine 12 mars 2019 à 20:03

2 réponses

Meilleure réponse

La réponse de scient1st est bonne mais elle ne vous mène pas jusqu'au bout. Franchement, c'est un peu une situation RTFM. Mais vous seriez pardonné de ne pas fouiller les docs d'indexation Numpy au premier essai, car ils sont denses et le modèle de données sera étranger si vous venez d'un environnement de programmation plus traditionnel.

Vous devrez utiliser np.clip sur les colonnes que vous souhaitez découper, comme ceci:

x[:,2] = np.clip(x[:,2], 0, 255)

Cela s'applique np.clip à la 2e colonne du tableau, "découpant" toutes les lignes, puis le réaffecte à la 2e colonne. La : est une syntaxe Python signifiant "donne-moi tous les éléments d'une séquence indexable".

Plus généralement, vous pouvez utiliser l'index de sous-ensemble booléen que vous avez découvert de la même manière, en découpant les lignes et en sélectionnant les colonnes souhaitées:

x[x[:,2] > 255, 2] = -1
1
shadowtalker 12 mars 2019 à 17:25

Essayez d'appeler clip sur votre tableau numpy:

import numpy as np
values = np.array([-3,-2,-1,0,1,2,3])
values.clip(-2,2)

Out[292]:
array([-2, -2, -1,  0,  1,  2,  2])
1
scient1st 12 mars 2019 à 17:11