3 votes

Numpy ValueError diffusion d'une liste de tuples dans un tableau

J'observe un comportement étrange en utilisant la diffusion de numpy. Le problème est illustré ci-dessous, où l'exécution du premier morceau de code produit une erreur :

A = np.ones((10))
B = np.ones((10, 4))
C = np.ones((10))
np.asarray([A, B, C])

ValueError: could not broadcast input array from shape (10,4) into shape (10)

Si, à la place, je développe les dimensions de B, en utilisant B = np.expand_dims(B, axis=0) le tableau est créé avec succès, mais il a maintenant (sans surprise) les mauvaises dimensions :

array([array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]),
   array([[[1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.]]]),
   array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])], dtype=float32)

Pourquoi la diffusion du premier exemple échoue-t-elle, et comment puis-je me retrouver avec un tableau comme ci-dessous (remarquez seulement les doubles crochets autour du deuxième tableau) ? Tout commentaire est le bienvenu.

array([array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]),
   array([[1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.],
    [1., 1., 1., 1.]]),
   array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])], dtype=object)

3voto

Ulrich Stern Points 4613

Y compris, disons, None empêche la diffusion, cette solution de contournement est donc une option :

np.asarray([A, B, C, None])[:-1]

Voici le résultat :

array([array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.]),
       array([[ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.]]),
       array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])], dtype=object)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X