背景:在我的程序中,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
对象的最佳方法是什么?
奖金问题:如果我ndarray
和Field
是我的子类对象,则不会保留类型,而我只会读取np.save
。有推荐的(有效的)替代方法吗?
答案 0 :(得分:0)
我刚刚发现numpy文档已经描述了这种特定情况:
https://docs.scipy.org/doc/numpy-1.13.0/user/basics.subclassing.html