Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 编写同时使用ndarray和MaskedArray的通用数值函数的最佳实践_Python_Numpy_Coding Style - Fatal编程技术网

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)