微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用已弃用的 NumPy API 有什么问题吗?

如何解决使用已弃用的 NumPy API 有什么问题吗?

我想将 numpy 数组传递给 C++,但有一个已弃用的 numpy API,我不知道在哪里可以找到替代品。 当我构建我的 C++ 代码来创建库时,它会向我显示一条警告消息。

numpy\npy_1_7_deprecated_api.h(14) : Warning Msg: Using deprecated NumPy API,disable it with #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION

使用已弃用的 API 有什么问题吗?如果我使用它,它只运行一次,然后退出我的程序,没有任何进一步的错误/警告消息(这个 cfunc 应该在我导入 c 库的 python 代码的循环中运行多次。)。当然,如果我禁用了已弃用的 API,它只会告诉我它找不到那个 API。

这是我的代码的一部分,用于接收 numpy 数组并将其转换为双数组以在 C++ 中处理它

#include <Python.h>
#include "numpy\ndarraytypes.h"
#include "numpy\ndarrayobject.h"
#include "numpy\arrayobject.h"

static PyObject* cfunc(PyObject* self,PyObject* args)
{
PyArrayObject* numpyarray;
double* carray;

if (!PyArg_ParseTuple(args,"O",&numpyarray))
{
return NULL;
}
carray = (double*)numpyarray->data; // When I build this code,it says 'data' is not a member of 'tagPyArrayObject'

如果您有任何想法,请告诉我。

非常感谢!

最好的祝福, 耶苏

解决方法

来自docs

不推荐直接访问结构字段。请改用 PyArray_*(arr) 表单。

对于 data,就是 PyArray_DATA(arr)。请注意,不能保证 NumPy 数组是连续的(或一维的),并且您没有进行任何安全检查。天真地索引数组的缓冲区是不安全的。

至于使用过时 API 的问题,过时的 API 可能会在未来的 NumPy 版本中移除。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。