linux - python整数的numpy默认dtype

标签 linux windows numpy int64 int32

我有遗留的 windows numpy 代码,其中有很多没有显式 dtype 的 nd.array 整数。在 Windows 中,它们被视为 np.int32。移动到 linux,它们变成了 np.int64,这会导致很多类型问题。

而不是在代码中的许多地方添加显式 dtype,

我能否以某种方式强制 linux 64 上的 numpy 将整数视为 np.int32 而不是 np.int64。 例如:np.array(1) 将变为 np.int32。

我看到有人在 1 中询问过它, ~两年前,想知道从那以后是否有什么改变。

最佳答案

遗留代码的一个变通方法可能是数组构造函数的装饰器,它将 dtype int64 的对象转换为 dtype int32 的对象:

from functools import wraps

def intas32(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        obj = func(*args, **kwargs)
        if (kwargs.get('dtype') is None 
            and hasattr(obj, 'dtype')
            and obj.dtype == np.int64):
            return obj.astype(np.int32)
        return obj
    return wrapper

现在创建你的一个版本:

my_arange = intas32(np.arange)

并使用它:

>>> my_arange(2)
array([0, 1], dtype=int32)

或猴子修补 NumPy 以获得所有需要的功能:

>>> np.arange = intas32(np.arange)
>>> np.arange(2)
array([0, 1], dtype=int32)
>>> np.array = intas32(np.array)
>>> np.array(1)
array(1, dtype=int32)

小心并测试这是否真的有效。

您可以通过编程方式执行此操作:

for name in ['array', 'arange']:
    obj = getattr(np, name)
    setattr(np, name, intas32(obj))

关于linux - python整数的numpy默认dtype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48538142/

相关文章:

windows - 如何知道菜单项何时被点击?

python - python 中的 reshape 错误

python - 为什么这些 apt-packages 在 Ubuntu 和 Heroku 上表现不一样?

windows - 在运行时更改进程名称

linux - ssh-keygen - 如何使用特定用户名设置 rsa key

windows - 安装了什么 Windows 工具包

c++ - 将 2D numpy 数组转换为 C++ short**?

python - 计算 1d 内单个粒子的均方位移

linux - 了解 Unix 所有者和 chmod 777

linux - 查找不包含搜索字符串的文件