J'ai le code suivant Cela me donne la sortie souhaitée: p> comme vous pouvez voir 13 caractères à gauche sont partis.
Est-il possible de diffuser cette opération? P> J'ai essayé, p> mais cela ne donne pas la sortie correcte comme avant. p>
4 Réponses :
Utiliser la compréhension résultat: p>
Je ne suis pas sûr que cela diffuse depuis qu'il utilise pour les boucles.
Vous pouvez convertir vos éléments de matrice en chiffres, les couper, puis convertir à la chaîne:
WIDTH = 5 MOD = 10 ** WIDTH numpy.char.zfill((s.astype(numpy.int64) % MOD).astype('str'), WIDTH) #array([['10005', '10006']], dtype='<U5')
Je peux avoir des zéros n'importe où.
Obtenu overflowerror: python int trop grand pour convertir en C long code>
J'ai utilisé les chiffres de votre exemple. Vos numéros sont-ils plus gros? J'ai changé le type de données explicitement vers numpy.int64 code>.
Vous pouvez fournir l'exemple complet, je vais copier / coller le tester.
Je suppose que RJUST code> a un potentiel, mais je ne pouvais encore pas le faire fonctionner dans 30min. Ce sont des instructions vectorisées ...
Une approche maladroite serait de convertir votre "chaîne de numéro" entier, effectuer un modulo à la longueur souhaitée puis convertir à une chaîne: qui donne le résultat souhaité. p> p>
Cela fonctionne cependant, j'espère qu'il y a une approche encore meilleure.
Les cordes sont-elles toujours 18 caractères? Et sinon, est-il plus important de dépouiller les 13 premiers caractères ou de conserver les 5 derniers?
Il est plus important de conserver les derniers 5. Strings peut varier en taille. Ils sont 18 caractères en ce moment, mais mai ...
Si tel est le cas, ma solution devrait alors tenir. Malheureusement, Afaik, NUMPY ne gère pas la tranchée de chaîne. Donc, ce serait la meilleure solution purement numpue que je puisse voir.
L'autre réponse que j'ai trouvée vraiment des niveaux. Merci pour l'effort.
Espérons qu'il sera aussi gentil de retourner la faveur;)
In [37]: sbig = np.resize(s, (1000,1000)) In [38]: timeit np.mod(sbig.astype('uint64'),100000).astype('U') 754 ms ± 9.33 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) In [39]: timeit np.frompyfunc(lambda s: s[-5:],1,1)(sbig) 245 ms ± 428 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
Excellent, il n'y a que environ 400 questions jusqu'à présent sur Numpy Broadcasting. Votre premier conseil consistait à regarder dans np.char code >
ensemble de fonctions. Dis-vous que ce ne sont pas assez rapides, même s'ils sont vectorisés?
Aussi, est-il possible pour np.frompyfunc code> faire les choses sur lesquelles. Actuellement, il renvoie le résultat?
Avec votre objet code> dtype,
fromyfunc code> transmet une chaîne à votre fonction. Une chaîne ne peut pas être modifiée en place. Votre fonction peut donc seulement renvoyer une nouvelle chaîne. Pour faire des modifications en place, vous devez itération et définir
s [i, j] = s [i, j] [- 5:] code>. La plupart des opérations code> numpy code> créent un nouveau tableau, même s'il s'agit d'un tampon temporaire. Les vrais en place sont rares.
Peut-être une partie de docs.cipy.org/doc/numpy/reeference/Routines .chard.html peut aider mais je n'avais pas de chance dans 30 minutes d'essayer ...
Utilisez
[i, j, ..,] code> lors de l'indexage numpy, non [] [] [] ..,
Regardez l'ensemble des fonctions de chaîne np.charne