#python #numpy
#python #numpy
Вопрос:
Я пытаюсь скопировать строку в словарь, состоящий из чисел с плавающей точкой. Я попытался преобразовать значение словарей в строку перед копированием. Это не сработало. Я разбил проблему на следующий код:
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'
Ошибка значения: не удалось преобразовать строку в float: ‘Hase’
Спасибо за помощь.
Комментарии:
1. Это
<class 'numpy.ndarray'>
2×32. Верно, мне нужны в основном значения с плавающей точкой, и позже я решил, что было бы неплохо добавить строку по причинам именования.
3. Я добавил эти случаи в свой ответ ниже, посмотрим, поможет ли это?
Ответ №1:
Используя dtype=object
, вы получаете массив ссылок на объекты python. Таким образом, вы можете использовать все варианты поведения строк 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)
ВЫВОД:
{'name': array([['Hase', 0, 0],
[0, 0, 0]], dtype=object)}
Редактировать:
Использование dtype='<U1'
для одного char
в 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)
ВЫВОД:
{'name': array([['H', '', ''],
['', '', '']], dtype='<U1')}
Комментарии:
1. Спасибо,
dtype=object
это было решение, которое я искал.
Ответ №2:
Ваш массив ожидает чисел. np.zeros
тип данных по умолчанию — float64
. Если вы хотите иметь массив строк, укажите его при создании (либо dtype=object
, либо dtype='<Ux'
с x количеством символов). Больше информации о строковых массивах здесь:
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. Это только поместит
H
, а не остальную частьstr
2. Мне нужно, чтобы первое значение массива было строкой. Остальные будут с плавающей точкой в моем рабочем процессе.
3. Затем используйте
dtype=object
4. Спасибо,
dtype=object
это было решение, которое я искал.