如何向下转换numpy.ndarray

时间:2019-05-19 11:44:13

标签: python types casting numpy-ndarray

背景:在我的程序中,numpy.ndarrays用于存储不同的内容(字段,材料,几何形状,参数等)。通常一件事是从另一件事开始计算的,结果被传递到下一个函数。如果我忘记了某个步骤,那么任何进一步的计算都将变得毫无意义,因此我想使用更严格的类型检查来避免错误。

我介绍了几个新类型,它们基本上都是func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let GPS = locations[locations.count - 1] // Get the array of last location latitude = GPS.coordinate.latitude didUpdatedLocation?() } 的新名称:

locationService.didUpdatedLocation = {
    print(locationService.latitude) // Print Latitude
}

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

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

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

奖金问题:如果我ndarrayField是我的子类对象,则不会保留类型,而我只会读取np.save。有推荐的(有效的)替代方法吗?

1 个答案:

答案 0 :(得分:0)

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

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