Сохранение пользовательских атрибутов при выборе подкласса массива numpy
Я создал подкласс NumPy ndarray послецифровая документация, В частности, у меня естьдобавил пользовательский атрибут путем изменения предоставленного кода.
Я манипулирую экземплярами этого класса в параллельном цикле, используя Pythonmultiprocessing
, Насколько я понимаю, способ, которым область по существу «копируется» в несколько потоков, используетpickle
.
Проблема, с которой я сейчас сталкиваюсь, связана с тем, как обрабатываются массивы. Я не могу найти исчерпывающую документацию по этому поводу, но некоторыеобсуждения между разработчиками укропа предположить, что я должен сосредоточиться на__reduce__
метод, который вызывается при травлении.
Кто-нибудь может пролить больше света на это? Минимальный рабочий пример - это просто пример кода, на который я ссылался выше, скопированного здесь для полноты:
import numpy as np
class RealisticInfoArray(np.ndarray):
def __new__(cls, input_array, info=None):
# Input array is an already formed ndarray instance
# We first cast to be our class type
obj = np.asarray(input_array).view(cls)
# add the new attribute to the created instance
obj.info = info
# Finally, we must return the newly created object:
return obj
def __array_finalize__(self, obj):
# see InfoArray.__array_finalize__ for comments
if obj is None: return
self.info = getattr(obj, 'info', None)
Теперь вот проблема:
import pickle
obj = RealisticInfoArray([1, 2, 3], info='foo')
print obj.info # 'foo'
pickle_str = pickle.dumps(obj)
new_obj = pickle.loads(pickle_str)
print new_obj.info # raises AttributeError
Благодарю.