Numpy: BOGUE: la découverte de dimension échoue lors du mélange de scalaires et de tableaux de forme == (1,)

Créé le 9 déc. 2019  ·  5Commentaires  ·  Source: numpy/numpy

np.array([0.25, np.array([0.3])]) échouera à créer un tableau flottant, le dtype sera object.

Cela me semble faux, est-ce intentionnel?

00 - Bug numpy.dtype

Tous les 5 commentaires

Cc @nschloe , qui est contre ce type de chose et peut faire un lien vers leur problème

Merci pour CCing. Oui, cela ressemble vraiment à quelque chose dont je me suis battu. : smiley_cat: https://github.com/numpy/numpy/issues/10404

Je dirais que créer un tableau d'objets est la bonne chose ici. Après tout, vous associez un flotteur et un tableau. Si vous avez créé une liste Python,

[0.25, np.array([0.3])]

vous vous attendez à la même chose: la première entrée est un flottant, la seconde un tableau de longueur 1. Ce serait déroutant si les listes et np.arrays se comportaient différemment ici.

De plus, créer implicitement un tableau flottant dtype ici rendrait impossible de créer un tableau [float, vector[1]] même si je le voulais.

La plupart du temps, spécifier np.array([0.25, np.array([0.3])]) est fait par erreur et peut être facilement corrigé; voir, par exemple, https://github.com/scipy/scipy/pull/11147/files#diff -21a6a0b0d89357857304bfba2da5a971L321. Après tout,

Explicite vaut mieux qu'implicite.

OK, fermeture. Ce PR aurait rendu les récents changements du NEP 34 (rétablis depuis) ​​moins perturbateurs pour scipy.

@nschloe

créer implicitement un tableau flottant dtype ici rendrait impossible de créer un tableau [float, vector [1]] même si je le voulais.

Pour mémoire, vous pouvez faire np.array(0.3, np.array([0.3]), dtype=object) .

Si vous avez créé une liste Python ...

Les ndarrays NumPy sont très différents des listes python. Je ne m'attendrais pas à ce que
np.array([0.2, 0.3, 0.4]) créerait un tableau d'objets, même si je n'ai pas spécifié np.float64 pour le dtype. Nous convenons donc que nous sommes à l'aise avec un certain niveau de découverte automatique de dtype basée sur la valeur. La question est de savoir ce qui devrait avoir la priorité: les types numériques ou les types d'objets.

Nous convenons donc que nous sommes à l'aise avec un certain niveau de découverte automatique de dtype basée sur la valeur.

L '"automatisation" est assez claire ici, je pense: toujours obtenir le type de données "le plus bas" qui peut capturer toutes les valeurs d'entrée:

numpy.array([1, 2]).dtype   # int64
numpy.array([1, numpy.array(2)]).dtype  # int64, array of rank 0 are basically scalars
numpy.array([1.0, 2]).dtype   # float64
numpy.array([1, [2]]).dtype   # O
Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

astrofrog picture astrofrog  ·  4Commentaires

toddrjen picture toddrjen  ·  4Commentaires

qualiaa picture qualiaa  ·  3Commentaires

marcocaccin picture marcocaccin  ·  4Commentaires

thouis picture thouis  ·  4Commentaires