Pickle по-прежнему не работает для объектов numpy.voidPython

Программы на Python
Ответить
Anonymous
 Pickle по-прежнему не работает для объектов numpy.void

Сообщение Anonymous »

Более года назад я сообщил об ошибке, с которой столкнулся при сборе довольно сложных данных. В то время я не знал, в чем проблема, и полагал, что она могла быть связана с рекурсивными ссылками.
Я сталкивался с этой проблемой несколько раз во время работы над своим проектом, но только делал произвольные действия, пытаясь исправить это, пока ошибка не исчезла. Теперь я наконец-то нашел время разобраться в источнике проблемы и уточнить свой MWE. Вот что у меня получилось:

Код: Выделить всё

import pickle
import numpy as np

# create data
dtypes = [('f0', 'O')]
# for some reason, I need at least an extra of 19 fields for it to crash
# immediately
dtypes += [(f'f{i+1}', 'i4') for i in range(19)]
data = np.empty(1, dtype=dtypes)
# print(data[0])

# dump data
dump = pickle.dumps(data[0], pickle.HIGHEST_PROTOCOL)
# print('dumping works')

# load data
load = pickle.loads(dump)
# print('loading works')

# process crashes here if len(dtypes) > 19
print(load)

# process prints random data, e.g.

# (((...), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), 0, 0,
# -1931060898, 32763, 1472326776, 503, 1482667496, 503, 0, 0, 1484270024,
# 503, 1472326776, 503, -1930803631, 32763, 1484270024, 503)

# or

# ((((((...), False, True), False, True), dtype('int32'), None), 0, 0), 0, 0)

# or

# (((...), ,
# ,
# ,
# ,
# ),
# 0, 0, -1931060898, 32763, 451341512)

# and crashes immediately afterwards if 2 

Подробнее здесь: [url]https://stackoverflow.com/questions/69571643/pickle-still-fails-for-numpy-void-objects[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»