Numpy Boost 1.66.0 Visual Studio 2017 Edition 가져오기
오늘
Boost를 사용하여 Python에서 C++를 호출하려는 소망을 실현하기 위해
Python에서 C++ 호출numby 사용하기
라는 내용으로 다음 조합을 시도해보고,
Boost 가져오기
방문http://www.boost.org/.다음 페이지에서 다운로드할 수 있는 페이지로 이동합니다.
다음 그림과 같이 Windows 파일을 다운로드합니다.
해동 후 간단히 보기 위해 직접 C반 밑에 놓다
명령 프롬프트를 시작하고 다음을 수행합니다
> bootstrap.bat
> b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=64 --stagedir=stage/x64 -j 8
-j
는 구축에 사용되는 핵심 수에 해당하므로 각각의 PC 환경에 따라 변경된다.기타 옵션은 다음과 같습니다.
boost 가져오기(Windows 10, Visual Studio 2015)
쓸모가 있는 것 같다.
4. 생산물 확인
--stagedir=stage/x64
로 지정했기 때문에 라이브러리 등의 출력 결과를 확인합니다.- libboost_numpy_....
- libboost_python3_....
이런 게 있으면 행복해.
Visual Studio 2017 시작
다음은 x64가 Release 플랫폼으로 구성된 경우에만 설명합니다.
C++ -> 빈 항목을 선택하고 항목 이름을 callcfrompy
로 설정합니다. 이 이름은 Python의 모듈로 사용할 이름을 지정합니다.import callcfrompy
이렇게 하면 돼.
이후 프로젝트 속성을 설정하고 Pybind 11이 설정한 것과 비슷한 부분도 있다.
See also
import callcfrompy
엔지니어링 속성 설정
구성 속성 -> 다음 항목을 모두 수정합니다.
ダイナミック ライブラリ(.dll)
.pyd
ランタイム ライブラリ
에서 マルチスレッド(/MT)
로 변경되었습니다.VC++ 디렉터리에 각자의 환경 설정에 따라 디렉터리와 라이브러리 디렉터리를 포함합니다.
내가 추가한 바와 같이:
샘플 코드 작성
원자재는 Python의 Boost를 C++로 확장합니다.NumPy 자습서(실습 편)부터 인용한다.
/*
Call C++ From Python
Reference:
http://tadaoyamaoka.hatenablog.com/entry/2017/05/25/234934
https://qiita.com/takuya-ki/items/3555ab17f9cea534e13b
https://qiita.com/termoshtt/items/81eeb0467d9087958f7f
*/
#define BOOST_PYTHON_STATIC_LIB
#define BOOST_NUMPY_STATIC_LIB
#include <boost/python/numpy.hpp>
#include <stdexcept>
#include <algorithm>
namespace p = boost::python;
namespace np = boost::python::numpy;
/* 2倍にする */
void mult_two(np::ndarray a) {
int nd = a.get_nd();
if (nd != 1)
throw std::runtime_error("a must be 1-dimensional");
size_t N = a.shape(0);
if (a.get_dtype() != np::dtype::get_builtin<float>())
throw std::runtime_error("a must be float32 array");
float *p = reinterpret_cast<float *>(a.get_data());
std::transform(p, p + N, p, [](float x) { return 2 * x; });
}
BOOST_PYTHON_MODULE(callcfrompy) {
Py_Initialize();
np::initialize();
p::def("mult_two", mult_two);
}
이걸 소스에 넣고 구축해.생성하면
callcfrompy.pyd
OK.그리고 같은 디렉터리에 다음 호출 코드를 만듭니다.
test.py
from callcfrompy import mult_two
import numpy as np
def main():
arr = np.array([1, 2, 3, 4, 5]).astype(np.float32)
mult_two(arr)
print(arr)
if __name__ == '__main__':
main()
실행 결과로 배열된 값이 2배가 되면 된다.
Reference
이 문제에 관하여(Numpy Boost 1.66.0 Visual Studio 2017 Edition 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SatoshiTerasaki/items/6ed55551bbdef79ce3fc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)