En place ce type de conversion d'un tableau NumPy

Donné un tableau NumPy de int32, comment puis-je convertir float32 en place? Donc en gros, je voudrais faire

a = a.astype(numpy.float32)

sans copier le tableau. Il est grand.

La raison pour cela est que j'ai deux algorithmes pour le calcul de a. L'un d'eux retourne un tableau de int32, l'autre renvoie un tableau de float32 (et c'est inhérent à ces deux algorithmes différents). Tous les autres calculs supposent que a est un tableau de float32.

Actuellement je fais la conversion en une fonction C appelé via ctypes. Est-il un moyen de le faire en Python?

  • À l'aide de ctypes est autant "Python" que l'utilisation de numpy. 🙂
  • Non, parce que je code et le compiler la fonction C moi-même.
  • Oh, je vois. Je pense que vous êtes probablement SOL sur celui-ci.
  • Naïve question: Comment pouvez-vous dire un=un.astype(numpy.float32) est de faire une copie? Python ralentit énormément et votre disque commence raclée?
  • Il y a beaucoup de façons de dire si elle renvoie une copie. L'un d'eux est de lire le documentation.
  • Que pensez-vous de l'aide a = np.cast['f'](a) avec a votre int32 tableau?
  • Cela ne veut pas effectuer une conversion. Il fait la même chose que le code dans la question d'origine. (Ne vous embêtez pas à essayer de le corriger -- il ne peut pas faire mieux que dans l'acceptation de réponse.)
  • Pourquoi il n'est pas en place?
  • C'est juste la façon dont les fonctions dans ce dictionnaire travail. Si j'avais poser la question "pourquoi ne print imprimer ses arguments?" ou "pourquoi ne a + b désigner la somme d'un a et b?", comment voulez-vous répondre à ces questions?
  • Sur place signifie simplement "à l'aide de la même mémoire que le tableau d'origine". Jetez un oeil à la accepté de répondre -- la dernière partie montre que les nouvelles valeurs ont, en effet, écrasé à la même mémoire.

InformationsquelleAutor Sven Marnach | 2010-12-08