Преобразование строк дампа JSON в числа с плавающей запятой в Python

Пытаюсь следовать за AWS Учебник DeepAR ML

Извините за мое незнание, когда дело доходит до JSON, но я понимаю это, поскольку предпочтительнее передавать строки, а не числа с плавающей запятой. Я пытался сделать это здесь и использовал UTF-8, так как это должен быть байтовый тип.

def write_dicts_to_file(path, data):
with open(path, 'wb') as fp:
    for d in data:
        fp.write(json.dumps(d).encode("utf-8"))
        fp.write("\n".encode('utf-8'))

Передав их в указанную выше функцию:

    %%time
write_dicts_to_file("train.json", training_data)
write_dicts_to_file("test.json", test_data)

Мои цели затем записываются в виде строк, что я и ожидал, но позже я перейду к коду AWS, чтобы здесь:

    %%time
data_channels = {

    "train": "{}/train/".format(data_location),
    "test": "{}/test/".format(data_location)
}

estimator.fit(inputs=data_channels, wait=True)

Что возвращает ошибку invalid float X, поскольку мои цели по-прежнему являются строками. Как передать только цели в файле JSON как числа с плавающей запятой, а не строки?

Как вы думаете, почему предпочтительнее передавать строки вместо чисел с плавающей запятой? Поплавки (и любое другое представление действительных чисел) имеют конечную точность. Конечно, это касается и струнных. Например, невозможно точно представить 1/3 в десятичной строке.

Håken Lid 07.10.2018 16:41

Не знаком с лучшими практиками JSON, поэтому я читал о других вопросах по этой теме. Есть ли способ записать файл JSON, заставляя строки перемещаться?

Derrick Sherrill 07.10.2018 16:44

JSON - это текст. Таким образом, при сериализации json все типы преобразуются в строки, и этого нельзя избежать. Когда я читаю ваш вопрос, мне непонятно, какую проблему вы здесь пытаетесь решить. Бывают случаи, когда вы можете захотеть использовать какое-нибудь настраиваемое строковое представление действительных чисел. Реализация по умолчанию предоставит вам что-то вроде ~ 50 бит точности. Вероятно, будут ошибки округления, но для реальных данных ошибки округления обычно несущественны.

Håken Lid 07.10.2018 17:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
225
0

Другие вопросы по теме