【问题标题】:How to downcast numpy.ndarray如何向下转换 numpy.ndarray
【发布时间】:2019-10-06 00:39:42
【问题描述】:

背景:在我的程序中,numpy.ndarrays 用于存储不同的东西(字段、材料、几何图形、参数等)。通常一件事是从另一件事计算出来的,然后将结果传递给下一个函数。如果在管道的某个地方我忘记了一个步骤,任何进一步的计算都变得毫无意义,所以我想使用更严格的类型检查来避免错误。

我介绍了几个新类型,它们基本上都是ndarray 的新名称:

class Field(np.ndarray):
  pass

class Geometry(np.ndarray):
  pass

现在我可以方便地使用isinstance 检查是否将正确的类型传递给函数。

但是我在创建这些对象时遇到了麻烦。通常它们应该是一些 numpy 操作的结果,所以在函数结束时,我想将 np.ndarray 转换为 Field 对象。只需编写Field(v) 就会调用nparray 构造函数,该构造函数失败,因为v 被解释为形状而不是数据。此外,我不想创建一个新对象,我不想复制任何我只想更改类型的东西。通常,这是一个坏主意,但就我而言,我知道,Field 只不过是名称不同的ndarray,所以它应该可以工作。

那么,将ndarray 显式转换为Field 对象的最佳方法是什么?

额外问题:如果我 np.savenp.load 我的子类对象,则不会保留类型,我只读取了 ndarray。有推荐的(有效的)替代方案吗?

【问题讨论】:

    标签: python types casting numpy-ndarray


    【解决方案1】:

    我刚刚发现 numpy 文档已经描述了这个具体案例:

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

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 2018-06-07
      • 2020-02-25
      • 1970-01-01
      • 2018-06-13
      相关资源
      最近更新 更多