如何向下转换numpy.ndarray

乔纳森·K

背景:在我的程序中,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.savenp.load我的子类对象,则不保留类型,而我仅读取ndarray有推荐的(有效的)替代方法吗?

乔纳森·K

我刚刚发现numpy文档已经描述了这种特定情况:

https://docs.scipy.org/doc/numpy-1.13.0/user/basics.subclassing.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章