背景:在我的程序中,numpy.ndarrays用于存储不同的东西(字段,材料,几何形状,参数等)。通常一件事是从另一件事开始计算的,结果被传递给下一个函数。如果我忘记了某个步骤,那么任何进一步的计算都将变得毫无意义,因此我想使用更严格的类型检查来避免错误。
我介绍了几个新类型,所有这些基本上都是的新名称ndarray
:
class Field(np.ndarray):
pass
class Geometry(np.ndarray):
pass
现在,我可以方便isinstance
地检查是否将正确的类型传递给函数。
但是,我在创建这些对象时遇到了麻烦。通常它们应该是一些numpy操作的结果,因此在函数的结尾,我想将a强制np.ndarray
转换为Field
对象。Field(v)
但是,仅编写就会调用nparray
构造函数,该构造函数会失败,因为它v
被解释为形状而不是数据。此外,我不想创建新对象,也不想复制任何我只想更改类型的东西。通常,这不是一个好主意,但就我而言,我知道aField
就是ndarray
具有不同名称的a,因此它应该可以工作。
那么ndarray
将a显式转换为Field
对象的最佳方法是什么?
额外的问题:如果我np.save
和np.load
我的子类对象,则不保留类型,而我仅读取ndarray
。有推荐的(有效的)替代方法吗?
我刚刚发现numpy文档已经描述了这种特定情况:
https://docs.scipy.org/doc/numpy-1.13.0/user/basics.subclassing.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句