J'essaie de transformer chaque élément d'un tableau numpy en un tableau lui-même (par exemple, pour interpréter une image en niveaux de gris en tant qu'image couleur). En d'autres termes:Ajout d'une dimension à chaque élément d'un fichier numpy.array
>>> my_ar = numpy.array((0,5,10))
[0, 5, 10]
>>> transformed = my_fun(my_ar) # In reality, my_fun() would do something more useful
array([
[ 0, 0, 0],
[ 5, 10, 15],
[10, 20, 30]])
>>> transformed.shape
(3, 3)
J'ai essayé:
def my_fun_e(val):
return numpy.array((val, val*2, val*3))
my_fun = numpy.frompyfunc(my_fun_e, 1, 3)
mais je reçois:
my_fun(my_ar)
(array([[0 0 0], [ 5 10 15], [10 20 30]], dtype=object), array([None, None, None], dtype=object), array([None, None, None], dtype=object))
et j'ai essayé:
my_fun = numpy.frompyfunc(my_fun_e, 1, 1)
mais je reçois:
>>> my_fun(my_ar)
array([[0 0 0], [ 5 10 15], [10 20 30]], dtype=object)
Ceci est proche, mais pas tout à fait raison - je reçois un tableau d'objets, pas un tableau d'ints.
Mise à jour 3! OK. J'ai réalisé que mon exemple était trop simple à l'avance - je ne veux pas simplement répliquer mes données dans une troisième dimension, je voudrais les transformer en même temps. Peut-être que c'est plus clair?
Notez que 'numpy.dstack' fonctionne sur 3ème dimension explicitement. Il est également pris en charge pour la rétrocompatibilité. L'utilisation de [numpy.stack] (https://docs.scipy.org/doc/numpy/reference/generated/numpy.stack.html) est préférable. – johndodo