Les tableaux Numpy, la fantaisie de l'indexation, les nombres complexes
Le code suivant multiplie une partie de la matrice par un nombre
def mul_by_num(a,b):
a[0:2] *= b
import numpy as np
a = np.ones(5,dtype=np.float64)
mul_by_num(a,1.0)
mul_by_num(a,1j) #Generates a warning (and casts to float!)
L'appel de la deuxième génère un avertissement
-c:2: ComplexWarning: Casting complex values to real discards the imaginary part
La question est, qu'est-ce que la plupart des pythonic façon à multiplier les parties de tableaux numpy par complexe/nombres réels sans vous embêter avec dtypes? Je ne veux pas vraiment à la conversion d'une matrice complexe au début, mais le programme peut en principe obtenir un complexe d'entrée.
EDIT:
Je ne m'inquiète pas sur la copie de la gamme complète, moulage complexes; Mais je veux éviter de vérifier dtypes (c'est à dire, np.float32, np.float64, np.complexe, np.int etc.)
Je pense que vous trouverez qu'il n'existe pas.
J'ai ajouté un commentaire à la question, que je veux juste éviter le contrôle complet de possible dtypes. Par exemple, a + b fonctionne très bien, mais l'affectation d'une partie de la matrice n'a pas.
J'ai ajouté un commentaire à la question, que je veux juste éviter le contrôle complet de possible dtypes. Par exemple, a + b fonctionne très bien, mais l'affectation d'une partie de la matrice n'a pas.
OriginalL'auteur Ivan Oseledets | 2012-08-15
Vous devez vous connecter pour publier un commentaire.
Vous allez avoir besoin de convertir le tableau de complexe à un certain point, sinon il ne sera pas en mesure de tenir des nombres complexes.
La façon la plus facile de convertir un tableau complexe est à ajouter
0j
:remarque: pas
a += 0j
que de tenter de modifier le tableau en place, qui ne marchera pas s'il n'est pas déjà complexe.dans ce cas, vérifiez auprès de
np.iscomplexobj(b)
.OriginalL'auteur ecatmur
Car l'augmentation de la vitesse de calcul, un tableau numpy permet de s'assurer que d'avoir le même type. Peut-être vous pouvez essayer la liste python ou moulage.
OriginalL'auteur conjohn668