迁移到numpy API 1.7 [英] Migrating to numpy api 1.7

查看:96
本文介绍了迁移到numpy API 1.7的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码(我的c ++ python模块中的主要功能):

I have this code (main function in my c++ python module):

static PyObject* FMM(PyObject* self, PyObject* args)
{
    PyObject *model_obj;
    PyObject *time_obj;
    PyObject *accepted_obj;
    PyObject *lat_obj;
    PyObject *lon_obj;
    PyObject *h_obj;
    int N;

    if (!PyArg_ParseTuple(args, "OOOOOOi", &model_obj, &time_obj, &accepted_obj, &lat_obj, &lon_obj, &h_obj, &N))
    {
        Py_INCREF(Py_None);
        return Py_None;
    }

    PyObject *model = PyArray_FROM_OTF(model_obj, NPY_FLOAT, NPY_INOUT_ARRAY);
    PyObject *time = PyArray_FROM_OTF(time_obj, NPY_FLOAT, NPY_INOUT_ARRAY);
    PyObject *accepted = PyArray_FROM_OTF(accepted_obj, NPY_BOOL, NPY_INOUT_ARRAY);
    PyObject *lat = PyArray_FROM_OTF(lon_obj, NPY_DOUBLE, NPY_INOUT_ARRAY);
    PyObject *lon = PyArray_FROM_OTF(lon_obj, NPY_DOUBLE, NPY_INOUT_ARRAY);
    PyObject *h = PyArray_FROM_OTF(h_obj, NPY_DOUBLE, NPY_INOUT_ARRAY);

    float *MODEL    = static_cast<float *>(PyArray_DATA(model));
    float *TIME     = static_cast<float *>(PyArray_DATA(time));
    bool *ACCEPTED  = static_cast<bool *>(PyArray_DATA(accepted));
    double *LAT     = static_cast<double *>(PyArray_DATA(lat));
    double *LON     = static_cast<double *>(PyArray_DATA(lon));
    double *H       = static_cast<double *>(PyArray_DATA(h));
    _FMM(MODEL, TIME, ACCEPTED, LAT, LON, H, N);


    Py_INCREF(Py_None);
    return Py_None;
}

我一直在警告

#warning "Using deprecated NumPy API,

我想迁移到numpy api 1.7:

I'd like to migrate to numpy api 1.7:

#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION

如何修改函数以在新版本的c-api中复制结果?你能指导我举例吗?

How should I modify my function to replicate result in new version of c-api? Can you direct me to any example?

推荐答案

好,很简单:

static PyObject* FMM(PyObject* self, PyObject* args)
{
    PyArrayObject *model_obj;
    PyArrayObject *time_obj;
    PyArrayObject *accepted_obj;
    PyArrayObject *lat_obj;
    PyArrayObject *lon_obj;
    PyArrayObject *h_obj;
    int N;

    if (!PyArg_ParseTuple(args, "OOOOOOi", &model_obj, &time_obj, &accepted_obj, &lat_obj, &lon_obj, &h_obj, &N))
    {
        Py_INCREF(Py_None);
        return Py_None;
    }

    //PyObject *model = PyArray_FROM_OTF(model_obj, NPY_FLOAT, NPY_INOUT_ARRAY);
    //PyObject *time = PyArray_FROM_OTF(time_obj, NPY_FLOAT, NPY_INOUT_ARRAY);
    //PyObject *accepted = PyArray_FROM_OTF(accepted_obj, NPY_BOOL, NPY_INOUT_ARRAY);
    //PyObject *lat = PyArray_FROM_OTF(lon_obj, NPY_DOUBLE, NPY_INOUT_ARRAY);
    //PyObject *lon = PyArray_FROM_OTF(lon_obj, NPY_DOUBLE, NPY_INOUT_ARRAY);
    //PyObject *h = PyArray_FROM_OTF(h_obj, NPY_DOUBLE, NPY_INOUT_ARRAY);

    float *MODEL    = static_cast<float *>(PyArray_DATA(model_obj));
    float *TIME     = static_cast<float *>(PyArray_DATA(time_obj));
    bool *ACCEPTED  = static_cast<bool *>(PyArray_DATA(accepted_obj));
    double *LAT     = static_cast<double *>(PyArray_DATA(lat_obj));
    double *LON     = static_cast<double *>(PyArray_DATA(lon_obj));
    double *H       = static_cast<double *>(PyArray_DATA(h_obj));
    _FMM(MODEL, TIME, ACCEPTED, LAT, LON, H, N);


    Py_INCREF(Py_None);
    return Py_None;
}

这篇关于迁移到numpy API 1.7的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆