Сбой программы при запуске команды PyArray_Max - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь передать массив в некоторый буст-код C ++.Мой буст-код падает без вывода ошибок при запуске команды PyArray_Max.Любая идея, почему это происходит?

Я использую команду "python numpy_setup.py build_ext --inplace" для сборки моей программы.Все файлы должны находиться в одном каталоге.

В соответствии со строкой 337 этого кода API на github, я правильно использую команду PyArray_Max: https://github.com/davidandrzej/pSSLDA/blob/master/FastLDA.c

Других примеров кода нетв Интернете (помимо связанного файла API), который показывает, как использовать PyArray_Max.

Если вы запустите мой код (вы можете сделать это, запустив numpy_test.py из командной строки), ваша консоль напечатает «здесь", но не" Макс вернулся! ".

Numpy_ext.cpp:

#include <boost/python/numpy.hpp>
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include <boost/python.hpp>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <stdint.h>
#include "Python.h"
#include "numpy/arrayobject.h"

namespace p = boost::python;
namespace np = boost::python::numpy;
//namespace PyObj = boost::python::object;

void numpy_info(PyObject *  object)
{
    PyArrayObject *array = reinterpret_cast<PyArrayObject*>(object);
    Py_Initialize();
    np::initialize();
    PyObject *elem;    
    std::cout << "here" << std::endl;
    elem = PyArray_Max(array, NPY_MAXDIMS , NULL);  //NPY_MAXDIMS is the same as axis = None in python
    std::cout << "Max returned!" << std::endl;
    int value = PyLong_AsLong(elem);
    std::cout << value << std::endl;
}
BOOST_PYTHON_MODULE(numpy_ext)
{
    using namespace boost::python;
    def("numpy_info", numpy_info);
}

numpy_test.py:

import numpy
import ctypes

a = numpy.array([2,3,1,0])
import numpy_ext
numpy_ext.numpy_info(a)

Вот файл установки, который я использую:

numpy_setup.py:

from distutils.core import setup
from distutils.extension import Extension
import numpy

numpy_ext = Extension(
    'numpy_ext',
    library_dirs=['C:\\local\\boost_1_69_0\\stage\\lib', 'C:\\Users\\jjones\\AppData\\Local\\Programs\\Python\\Python37\\Lib\\site-packages\\numpy\\core\\include\\numpy'],
    sources=['numpy_ext.cpp'],
    libraries=['libboost_python37-vc141-mt-gd-x64-1_69'],
)

setup(
    name='numpy-ext',
    version='0.1',
    include_dirs=[numpy.get_include()],
    ext_modules=[numpy_ext])
...