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

标签 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),但在不同的命名空间下。

最佳答案

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 的另一个例子.

关于python - 编写适用于 ndarray 和 MaskedArray 的通用数值函数的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20771788/

相关文章:

php - 为什么一些编码指南会更改 PHP if/else 中的条件顺序?

java - Sonarqube 在计算新错误/漏洞/泄漏时不尊重 git 提交日期

numpy - SciPy PearsonR ValueError : The truth value of an array with more than one element is ambiguous. 使用 a.any() 或 a.all()

c++ - 单步返回声明或多步返回声明

python - 在析构函数中创建检查类型映射

python - 窗口中进程打开的文件名?

python - 通过从另一个 csv 中提取值来附加一个 csv

python - 无法从 Cloud9 python 应用程序连接到 MySQL 数据库(托管在 arvixe 中)

python - python中的多维外积

python - IDL # 运算符的 Python numpy 等价物是什么?