Python 编写同时使用ndarray和MaskedArray的通用数值函数的最佳实践
有没有比这更美的方法:Python 编写同时使用ndarray和MaskedArray的通用数值函数的最佳实践,python,numpy,coding-style,Python,Numpy,Coding Style,有没有比这更美的方法: import numpy as np from numpy import ma def foo(x): pkg = ma if isinstance(x, ma.MaskedArray) else np return pkg.apply_along_axis(bar, -1, x) 我觉得它不是Pythonic,就试图充分利用多态性而言 编辑 上面的代码片段只是一个演示,强调了以下事实:np和ma具有高度相似的(专门设计的)接口(例如,apply\u沿_
import numpy as np
from numpy import ma
def foo(x):
pkg = ma if isinstance(x, ma.MaskedArray) else np
return pkg.apply_along_axis(bar, -1, x)
我觉得它不是Pythonic,就试图充分利用多态性而言
编辑
上面的代码片段只是一个演示,强调了以下事实:np
和ma
具有高度相似的(专门设计的)接口(例如,apply\u沿_轴
),但在不同的名称空间下。isinstance()
与这里一样好
如果您想使用以下命令,可以将其隐式化:
这是另一个例子。什么是非音速?完全有效的代码,如果它满足您的需要。
from pkgutil import simplegeneric
import numpy as np
from numpy import ma
@simplegeneric
def pkg(obj):
return np # use numpy by default
@pkg.register(ma.MaskedArray)
def _(x):
return ma
def foo(x):
return pkg(x).apply_along_axis(bar, -1, x)