python - numpy vs. python:修补圆形函数
问题描述
我有一个文件,它定义
def foo(x):
return round(x)
这round
是pythonbuilt-in
函数。
现在,我想用一个 numpy 数组调用这个函数。Numpy 也有一个round
功能。不幸的是,有一些问题(例如#11557)
import numpy as np
foo(7.6)
foo(np.array([7.6])) # works with python2 + np_1.14.0, not with 3.6.9 + np_1.14.5
foo(np.array([7.6, 8.9])) # TypeError: type numpy.ndarray doesn't define __round__ method
是否有可能用函数round
内部np.round
替换foo
函数?round = np.round
导入前或导入后的一些补丁foo.round = np.round
?
编辑:我正在寻找不修改文件的解决方案。
解决方案
子类是一种解决方法(正如@Anton Pomieshchenko 评论的那样)
class Array(np.ndarray):
def __new__(cls, array, **kwargs):
return np.asarray(array, **kwargs).view(cls)
def __round__(self):
return np.round(self.data)
foo(Array([7.6, 8.9]))
适用于 python 3,而在 python 2 中我得到TypeError: only size-1 arrays can be converted to Python scalars
.
我没有成功我也尝试过np.__round__ = np.round
(TypeError:只有 size-1 数组可以转换为 Python 标量)或np.ndarray.__round__ = np.round
(TypeError:无法设置内置/扩展类型'numpy.ndarray'的属性)。
推荐阅读
- php - Array - 从数组中选择子子 ID
- spring-security - Jhipster,防止用户更新其他用户创建的实体
- asp.net - 新创建的 Asp.net Web App 只能运行一次(在 VS2017 中)
- bash - 打印在一个字段中重复的元素与在另一个字段中重复的另一个元素相关联的行
- elasticsearch - 使用键为整数的脚本进行 Elasticsearch 术语聚合
- excel - 计算并可视化每个联系人的日期出现次数并从中制作图表
- r - 使用标准评估选择可能不存在且没有错误的列
- ruby-on-rails - 使用 Rails 的 Oauth 登录中断用户操作
- python - 发送信号以突出显示 QtableWidget PyQt 中的单元格
- c++ - LeetCode 在 C++ 中删除重复项