Предыстория: в моей программе numpy.ndarrays используются для хранения разных вещей (полей, материалов, геометрий, параметров и т. Д.).Часто одно вычисляется из другого, и результат передается следующей функции.Если где-то в конвейере я забываю шаг, любые дальнейшие вычисления становятся бессмысленными, поэтому я хочу использовать более строгую проверку типов, чтобы избежать ошибок.
Я представил несколько новых типов, все из которых, по сути, простоновые имена для ndarray
:
class Field(np.ndarray):
pass
class Geometry(np.ndarray):
pass
Теперь я могу удобно использовать isinstance
, чтобы проверить, передан ли правильный тип функции.
Однако у меня возникают проблемы при создании этих объектов.Обычно они должны быть результатом некоторых простых операций, поэтому в конце функции я хотел бы привести np.ndarray
к Field
объекту.Однако простое написание Field(v)
вызывает конструктор nparray
, который терпит неудачу, поскольку v
интерпретируется как форма, а не как данные.Кроме того, я не хочу создавать новый объект, я не хочу ничего копировать, я просто хочу изменить тип.Обычно это было бы плохой идеей, но в моем случае я знаю, что Field
- это не что иное, как ndarray
с другим именем, поэтому он должен работать.
Так что лучшеявного приведения ndarray
к Field
объекту?
Дополнительный вопрос: если я np.save
и np.load
мой объект подкласса, тип не сохраняется, и я читаю только ndarray
.Есть ли рекомендуемая (эффективная) альтернатива?