J'essaie de copier une chaîne dans un dictionnaire composé de flottants. J'ai essayé de changer la valeur des dictionnaires en chaîne avant de copier. Cela n'a pas fonctionné. J'ai décomposé le problème dans le code suivant:

tst_dict = {}

tst_dict['name'] = np.zeros((2,3))

tst_dict['name'][0,0] = str(tst_dict['name'][0,0])
tst_dict['name'][0,0] = 'Hase'

ValueError: impossible de convertir la chaîne en float: 'Hase'

Merci pour ton aide.

1
alettmann 14 mars 2019 à 15:12

2 réponses

Meilleure réponse

En utilisant dtype=object, vous obtenez un tableau de références d'objets python. Vous pouvez donc avoir tous les comportements des chaînes python:

import numpy as np

tst_dict = {}
tst_dict['name'] = np.zeros((2,3), dtype=object)
tst_dict['name'][0,0] = str(tst_dict['name'][0,0])
tst_dict['name'][0,0] = 'Hase'

print(tst_dict)

SORTIE :

{'name': array([['Hase', 0, 0],
       [0, 0, 0]], dtype=object)}

MODIFIER :

Utilisation de dtype='<U1' Pour un seul char dans le str:

import numpy as np

tst_dict = {}
tst_dict['name'] = np.zeros((2,3), dtype='<U1')
tst_dict['name'][0,0] = str(tst_dict['name'][0,0])
tst_dict['name'][0,0] = 'Hase'

print(tst_dict)

SORTIE :

{'name': array([['H', '', ''],
       ['', '', '']], dtype='<U1')}
1
DirtyBit 14 mars 2019 à 12:26

Votre tableau attend des nombres. Le type de données np.zeros par défaut est float64. Si vous souhaitez avoir un tableau de chaînes, spécifiez-le lors de la création (soit dtype=object soit dtype='<Ux', avec un nombre x de caractères). Plus d'informations sur les tableaux de chaînes ici :

tst_dict = {}

tst_dict['name'] = np.zeros((2,3), dtype='<U10')
# if you want a string array
tst_dict['name'][0,0] = str(tst_dict['name'][0,0])
tst_dict['name'][0,0] = 'Hase'
1
Mstaino 14 mars 2019 à 12:21