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.

OriginalL'auteur Ivan Oseledets | 2012-08-15