Y a-t-il une manière numérotée native de convertir une gamme de représentations de chaîne de booléens, par exemple: à une matrice booléenne réelle que je peux utiliser pour masquer / indexation? Je pourrais faire une boucle pour traverser et reconstruire la matrice, mais pour les grandes tableaux, c'est lent. P> P>
3 Réponses :
est-ce suffisant?
my_list = ['True', 'False', 'True', 'False'] np.array(x == 'True' for x in my_list)
Cela ne fonctionnera pas comme écrit car NUMPY ne joue pas bien avec les expressions génératrices.
La boxe en tant que liste Comp fonctionne, mais il est 20 fois plus lent que la réponse de DSM pour les tableaux de plus de quelques milliers de valeurs.
Vous devriez pouvoir faire une comparaison booléenne, IIUC, que le ou p> dtype code> est une chaîne ou objet code>:
Les merveilles de la radiodiffusion? En outre, il est rapide (20 fois plus rapide que l'autre réponse).
@NewMu et string interne, si je ne me trompe pas (au moins, tous les éléments de A code> qui sont 'true' code> ont la même valeur pour ID () code>, qui est également le cas pour tous les éléments 'faux' code> éléments [bien que curieusement, est code> ne semble pas fonctionner pour ces éléments. En fait, il ne veut pas Travaillez même lorsque vous testez une entrée contre elle-même. a [0] est un [0] code> renvoie false code>, même si ID (A [0]) == ID (A [0]) CODE> Retours VRAI CODE>]) Je crois que la croire est la raison pour laquelle les contrôles d'égalité ici sont tellement plus rapides que numpy.char.startswith () code> Même si les fonctions de numpy.char code> sont censées effectuer des opérations de chaîne rapides sur des tableaux numpus.
J'ai trouvé une méthode encore plus rapide que celle des DSM, en prenant l'inspiration d'Eric, bien que l'amélioration soit mieux vue avec des listes de valeurs plus petites; À très grandes valeurs, le coût de l'itération elle-même commence à l'emporter sur l'avantage d'effectuer les tests de vérité lors de la création de la matrice numpue plutôt qu'après. Test avec les deux Configuration du test: p> avec 1000 articles, les déclarations plus rapides prennent environ 66 % Le temps de DSM: p> pour des matrices de chaîne plus petites (sur les centaines plutôt que des milliers), le temps écoulé est inférieur à 50% des DSM: P> XXX PRE> Un peu plus de 25% de DSM est effectué avec 50 éléments par liste: P> est code> et == code> (pour les situations où les chaînes sont internées par rapport à quand elles pourraient ne pas être, car est code> ne fonctionnerait pas avec non -Interned Cordings. Comme 'vrai' code> va probablement être un littéral dans le script, il devrait être interné, cependant) a montré que pendant que ma version avec == code> était plus lente que avec est code>, il était encore beaucoup plus rapide que la version de DSM. >>> timer(stateIs, 5)
[1.8826215278058953, 1.850232652068371, 1.8559381315990322]
>>> timer(stateEq, 5)
[1.9252821868467436, 1.894011299061276, 1.894306935199893]
>>> timer(stateDSM, 5)
[18.060974208809057, 17.916322392367874, 17.8379771602049]
Avez-vous remarqué qu'ils sont tous vrai code> dans le résultat? :-P
@DSM Ma nouvelle réponse semble être une grande amélioration sur mon ancien.
@NewMu Mes deux sont encore légèrement plus rapides que les DSM, même avec des valeurs 5K, c'est que l'amélioration est beaucoup moins que pour les petites listes.
Ah ok! Juste difficile de battre la simplicité des DSM.
Est-ce une matrice de chaîne numpue (si une telle chose existe) ou un tableau de cordes Python?
C'est un tableau de cordes numpy - bizarre, je sais.
@NewMu - Je pense que la solution à cela est d'éviter d'obtenir une gamme de représentations de chaînes en premier lieu. Comment êtes-vous venu par ce tableau? C'est peut-être là que nous devrions commencer à chercher celui-ci ...
Je dois m'occuper du code de quelqu'un d'autre.