Np.float64 и dtype=object не могут быть сериализованы

у меня есть опубликованный ниже список, и он содержит списки, так что это список списков, и у меня есть веб-сервис, который возвращает return jsonify(resultsDict). проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю приложение, я получаю одно из сообщений об ошибках, опубликованных ниже. как показано в коде ниже, я попытался установить dtype=np.float64 и dtype=object, но каждый из них генерирует связанную с ним ошибку, как показано ниже в коде. пожалуйста, дайте мне знать, как это исправить

попытка_1

resultsDict = {
    "extras": {
        "pvTreatment":np.array(pvTreatment,dtype=np.float64).tolist(),
        ...
        ...
        ...
    }
}
    
**error associated**:

    ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (7,) + inhomogeneous part.

попытка_2

resultsDict = {
    "extras": {
        "pvTreatment":np.array(pvTreatment,dtype=object).tolist(),
        ...
        ...
        ...
    }
}   
    
**error associated**:

    raise TypeError(f'Object of type {o.__class__.__name__} '
    TypeError: Object of type float32 is not JSON serializable
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Мое предложение состоит в том, чтобы сначала использовать списки одинакового размера (если они не отличаются на порядки), как в этом примере — Список списков в массив numpy

Таким образом, вам будет легче десериализовать его в список списков. Также вы можете использовать внешние библиотеки, такие как pickle, если хотите.

но основной список содержит списки, которые отличаются по размеру, например [[1,2,3,4],[5],[6,7],....]?

LetsamrIt 02.11.2022 07:19
Ответ принят как подходящий

Если я попытаюсь создать массив из двух массивов, различающихся по длине, я получу вашу ошибку:

In [186]: np.array([np.ones((3)), np.zeros((4))],float)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [186], in <cell line: 1>()
----> 1 np.array([np.ones((3)), np.zeros((4))],float)

ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part.

Я могу создать массив object dtype:

In [187]: np.array([np.ones((3)), np.zeros((4))],object)
Out[187]: array([array([1., 1., 1.]), array([0., 0., 0., 0.])], dtype=object)

Но когда я использую tolist, я получаю список с двумя массивами:

In [188]: np.array([np.ones((3)), np.zeros((4))],object).tolist()
Out[188]: [array([1., 1., 1.]), array([0., 0., 0., 0.])]

Массивы не сериализуемы в формате JSON.

Если бы внутренние массивы были изменены на списки, мы бы получили список списков:

In [191]: np.array([np.ones((3)).tolist(), np.zeros((4)).tolist()],object).tolist()
Out[191]: [[1.0, 1.0, 1.0], [0.0, 0.0, 0.0, 0.0]]

Для такого рода вещей избегайте массивов - как для внешнего списка, так и для внутреннего.

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