相关疑难解决方法(0)

当import_array不在同一翻译单元中时的Segfault

我在使NumPy C API正确初始化时遇到问题.我想我已经把问题import_array从一个不同的翻译单元中调出来了,但我不知道为什么这个问题很重要.

最小的工作示例:

header1.hpp

#ifndef HEADER1_HPP
#define HEADER1_HPP
#include <Python.h>
#include <numpy/npy_3kcompat.h>
#include <numpy/arrayobject.h>

void initialize();

#endif
Run Code Online (Sandbox Code Playgroud)

file1.cpp

#include "header1.hpp"

void* wrap_import_array()
{
  import_array();
  return (void*) 1;
}

void initialize()
{
  wrap_import_array();
}
Run Code Online (Sandbox Code Playgroud)

file2.cpp

#include "header1.hpp"

#include <iostream>

void* loc_wrap_import_array()
{
  import_array();
  return (void*) 1;
}

void loc_initialize()
{
  loc_wrap_import_array();
}

int main()
{
  Py_Initialize();
#ifdef USE_LOC_INIT
  loc_initialize();
#else
  initialize();
#endif
  npy_intp dims[] = {5};
  std::cout << "creating descr" << std::endl;
  PyArray_Descr* dtype = PyArray_DescrFromType(NPY_FLOAT64);
  std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ python numpy python-2.7 python-3.x

7
推荐指数
1
解决办法
734
查看次数

numpy C API 中的 import_array 如何工作?

我正在尝试将 c++ 中的 c 样式数组转换为 numpy 数组,并在尝试使用“PyArray_SimpleNewFromData”函数时遇到问题。原来我需要打电话

import_array()
Run Code Online (Sandbox Code Playgroud)

虽然我不明白如何调用这个函数。每当我尝试调用它时,我都会收到我无法理解的编译器错误。例如编写以下简单脚本:

#include <Python.h>
#include <numpy/arrayobject.h>

int main(){
    Py_Initialize();
    import_array();
    Py_Finalize();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产生编译器错误

错误:返回语句没有值,在返回 'int' 的函数中 [-fpermissive] import_array();

我看了几个例子,例如:

Numpy C-Api 示例给出了 SegFault

PyArray_SimpleNewFromData 示例

https://codereview.stackexchange.com/questions/92266/sending-ac-array-to-python-numpy-and-back

编译多个模块时出现 import_array() 的 Numpy/CAPI 错误

但无论我尝试什么(即使看似遵循这些示例),我似乎都会遇到上面的编译器错误。我错过了什么或做错了什么?关于如何调用 import_array() 函数的解释将非常受欢迎。谢谢您的帮助!

更新:

我正在使用 python 2.7.11,我认为它可能与这里讨论的内容有关:

https://github.com/clemenscorny/brisk/issues/3

但我仍然不知道如何解决它。

c++ python numpy c-api

5
推荐指数
1
解决办法
2675
查看次数

标签 统计

c++ ×2

numpy ×2

python ×2

c-api ×1

python-2.7 ×1

python-3.x ×1