编写适用于ndarray和MaskedArray的通用数值函数的最佳实践

时间:2013-12-25 10:33:59

标签: 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。

修改

上面的代码片段只是一个演示,突出显示npma具有高度相似(专门设计)的接口(例如apply_along_axis),但在不同的命名空间下

1 个答案:

答案 0 :(得分:0)

isinstance()就像在这里一样好。

如果你想使用single-dispatch generic function

,你可以隐含它
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)

以下是generic function in Python的另一个例子。