2011-02-27 2 views
1

J'ai un tableau de chaînes. Lorsqu'une valeur du tableau est indéfinie, None est imprimé comme prévu. Est-il possible de fournir une valeur par défaut pour les valeurs None?numpy - jolie impression

par exemple. dans ce qui suit, je veux « _ » au lieu de Aucun

[[None B C] 
[M None O] 
[X Y None]] 

deviendraient

[[_ B C] 
[M _ O] 
[X Y _]] 

Répondre

0

une solution simple pourrait être de transformer votre tableau à la chaîne d'abord, puis remplacer la chaîne Aucun après, par exemple, si votre matrice est a:

print(str(a).replace('None','_')) 

vous pouvez également définir une fonction:

def printarray(a): 
    print(str(a).replace('None','_')) 
+0

Le problème est que cela oblige toutes les chaînes ne contiennent pas de « Aucun », ou ils seront modifiés . – EOL

3

Numpy a la capacité de créer des tableaux booléens à partir des conditions de test, puis d'utiliser ces tableaux booléens avec la notation de parenthèse pour modifier les valeurs sélectionnées. Pour un tableau de chaînes foo:

is_none = (foo == None) 
foo[ is_none ] = "_" 

(Oui, je sais que, normalement, vous devez utiliser is lorsque l'on compare avec None, mais puisque vous savez que votre entrée est une chaîne, et je ne pense pas que Numpy fournit un is vectorisé déclaration, == sera très bien)

7

Vous pouvez également envisager d'utiliser un tableau masqué.

import numpy as np 

x=np.array([[None, 'B', 'C'], 
      ['M', None, 'O'], 
      ['X', 'Y', None]]) 
print(x) 
# [[None B C] 
# [M None O] 
# [X Y None]] 

x=np.ma.masked_equal(x,None) 
print(x) 
# [[-- B C] 
# [M -- O] 
# [X Y --]] 
+1

+1, le tableau masqué est la solution la plus propre. – jfs