Ошибка выбора Python: TypeError: объект pickle не возвращает список. Проблема с NumPy?
Я написал сценарий, который выполняет небольшую обработку данных, затем выбирает результаты перед дальнейшей обработкой, чтобы я мог использовать окончательные параметры для построения графиков. Я выбираю списки двух классов, которые я создал. Для каждого списка можно использовать маринование, но удаление одного из них возвращает следующую ошибку:
Traceback (most recent call last):
File "script.py", line 980, in <module>
main()
File "script.py", line 956, in promoter_main
open(os.path.join(pickle_dir, 'doublep.pickle'), 'rb'))
File "/usr/lib/python2.6/pickle.py", line 1370, in load
return Unpickler(file).load()
File "/usr/lib/python2.6/pickle.py", line 858, in load
dispatch[key](self)
File "/usr/lib/python2.6/pickle.py", line 1217, in load_build
setstate(state)
File "/home/jmerkin/software/numpy/numpy/ma/core.py", line 5468, in __setstate__
ndarray.__setstate__(self, (shp, typ, isf, raw))
TypeError: object pickle not returning list
Как я уже сказал, один идет нормально (список экземпляров SingleP), другой выдает мне эту ошибку при снятии травления (экземпляры DoubleP). Я не решаюсь опубликовать весь код для класса, потому что он длинный, но в основном у него есть пара методов, которые заполняют некоторые атрибуты. Эти атрибуты состоят из логических значений, списков кортежей, строк, целых или списков numpy.ma.arrays. Некоторые из этих массивов маскируют numpy.nan.
Похоже, что это потенциально связанная проблема: http://projects.scipy.org/numpy/ticket/897. В этом случае проблема заключается в массивах с np.object в качестве dtype массива. Тем не менее, я без проблем обрабатывал numpy.ma.arrays, в том числе массивы, которые маскировали numpy.nan, без проблем.
Я скучаю по чему-то глупому с маринованием? Я не изменяю объект между тем, когда он был протравлен, и когда я пытаюсь открепить.
я переписал кусочки кода так, чтобы вместо того, чтобы иметь массив измерений n x m x l в качестве некоторых атрибутов, у меня есть список с n записями, каждая из которых является массивом mxl, и теперь он доволен и рассасывается. Я очень смущен, но это работает. Я не собираюсь закрывать это, потому что мои вопросы остаются, почему я получил эту ошибку?
1 ответ
У меня была очень похожая проблема: я переписал скрипт, чтобы значения np.nan также были замаскированы (я бы хотел, чтобы numpy, scipy и matplotlib могли обрабатывать массивы последовательно), но это вызвало pickle.load()
оплакивать Я избавился от замаскированных массивов, и все снова заработало. Решение, кажется, состоит в том, чтобы добавить и удалить маски, чтобы, пожалуйста, мариновать. Я знаю, что решения не слишком много, но, похоже, оно работает.