質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

7463閲覧

pythonで学習したデータをpickleファイルをC++で開きたい

nonshi

総合スコア17

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2019/03/14 15:19

編集2019/03/19 12:56

実現したいこと

scikit-learnで学習した結果をpickle moduleで保存し、そのファイルをC++で開きたいと考えています。
しかし、調べてもなかなか出てこなくそもそもできないんじゃないかと考えています。
どなたか知っている方がいましたらそれについての大まかな方法の回答をお願いします。
よろしくお願いします。

###c++で実行したい or C++からpythonに実行命令を出したいpythonコード

python

1import pickle 2#保存しているpklファイルを読み込む 3with open("model.pkl", "rb") as f: 4 model = pickle.load(f) 5#ここで予測したい値を入れる 6X_test = [[0.0401541,0.155155]] 7#予測結果を出す 8print(model.predict(X_test))

##現在考えられるアプローチ(2パターン)
c++でpython実行
1、c++でpickle moduleを使えるようにする

C++からpythonに実行命令
1、C++から値をを送る
2、受け取った値ををpythonで処理
3、出した値をc++に返す

可能性がある順番
1.C++にpython組み込み(C++でpickle使ってそのまま組み込み)
2.C++からpython1関数をよびだし
3.Boost.pythonを使う
4.pybind11を使う

##環境
windows10
Visual Studio 2017

##解決策(解決しましたが・・・)
C++からPython関数を呼び出して変数を渡して処理した値を返してもらう方法
でできたのですが速度が出なくて現在下のアプローチで試しています。

##現在詰まっている状況(未解決)
C++にPythonを組み込む
イメージ説明
ちなみに現在PyFile_FromStringの書き方はpython3では無くなっていたらしく、2系にも落としたのですが最終的にはstr型じゃないからダメ!と言われこの方法はあきらめかけています。
参考にしているサイト
https://stackoverflow.com/questions/35768773/loading-python-pickled-object-in-c

ikedas👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

質問文の画像、pは大文字かと。

さすがに直にC++とPythonのインターフェースを書くのは苦行じみてるので、cython介してDLLにしてそれ経由で呼ぶというのは?

https://qiita.com/SatoshiTerasaki/items/0df5970eebf9e0ab4031
https://qiita.com/SatoshiTerasaki/items/6238fc075e8a47f44552
http://yoshidabenjiro.hatenablog.com/entry/2018/05/12/004801
http://yukisakamoto.hatenablog.com/entry/2015/09/22/105630

投稿2019/03/16 17:04

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nonshi

2019/03/16 18:17

毎回コメントありがとうございます!今回もよろしくお願いします。 本題なのですが現在c++だけで完結できるか試しておりまして、それができなかった場合この方法を試してみようと思います!その時はよろしくお願いします。
hayataka2049

2019/03/16 19:38 編集

ごめんなさい、はっきり言って守備範囲外なので「よろしくお願いします!」は拒否ります。 他にこのへんが得意な人がいればいいんですが、teratailもそんなにユーザー層分厚くないので「いたらラッキーだね」程度だと思います。あと、仮にいても面倒くさいと思って回答しない可能性も高い。 こういうコアなことをQAサイト頼りながらやるというのも厳しいものがあるので、何やるにしても原則自力でどうぞ。
nonshi

2019/03/16 21:39

なるほど・・・、そうなんですね。頑張ってやってみます!
hayataka2049

2019/03/17 16:11

あとcythonの他にboost.pythonというのもありましたね。これに頼るというのもありかも
nonshi

2019/03/19 11:10

現在、試してるのですがなかなかうまくいかないです(ネットを漁っては実装してました)。これからはこの公式サイトを見てどんなコードがあるか片っ端から見てみます。
guest

0

大まかに。

この章や関連の文書を見てみてください。

投稿2019/03/15 00:22

ikedas

総合スコア4227

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nonshi

2019/03/15 10:16 編集

python.hがないといわれていて,入れようとしてもやり方がわかりません。 環境は追記しておきます。力添えよろしくお願いします。 追記 すみません、解決しました。最終的な目標にはたどり着いていないのでもう少しお付き合いください
nonshi

2019/03/15 11:55 編集

現在python.hをインクルードしてそのあとpython36.lidがないと言われ、debugからReleaseに変更した際にエラー文はなくなり、buildはできるようになったのですがエラーをはかれてしまい実行できません。どのようにすればよろしいでしょうか? 参考にしたサイト https://www.codeproject.com/Articles/820116/Embedding-Python-program-in-a-C-Cplusplus-code 現在の状況を画像で添付しました。
nonshi

2019/03/15 17:52

こちらはpython上でC++を使ったmoduleの作り方?と思っていましたがこれであってるんですね。やってみます。
nonshi

2019/03/16 18:20 編集

こちらの方法ではないのですが無事現在の問題は解決することができました。 しかし、私はまた新たな問題に直面して実際にpickleデータを開こうと思ったのですが12行目の紫が現在python3にはない関数?がありうまく起動することができません。そこで自分なりに調べて前の代わりを書いてみたのですがうまくいきません。 もし解決策があれば教えてもらえますでしょうか?よろしくお願いします。
ikedas

2019/03/16 22:25

「詰まっている」画像は差し替えないで履歴として残したらどうでしょう。前に見たはずのものがないので一瞬自分の正気を疑いました。
nonshi

2019/03/17 00:43

了解です。アドバイスのほうさっそく取り入れてみます。
red_bb

2019/03/19 09:30

横から失礼します。 エラー箇所ですが、PyRun_SimpleStringではなくPyFile_FromStringではないでしょうか。 外してたらすいません。
nonshi

2019/03/19 11:08

@red_bb様 そうです、現在掲載してるのは自分が試行錯誤している部分です。 現在PyFile_FromStringの書き方はpython3では無くなっていたらしく、自分なりに試行錯誤していました。 今見返すと誤解を招くような写真なので取り替えておきます。ご指摘ありがとうございます。
guest

0

自己解決

すみません、お騒がせしましたが最終的に実行できるようになりました。
方法としてはC++からPythonの特定の関数を呼び出してこちらに値を返してもらう方法でできました。
けど、今は最初のアプローチのC++にPythonコードを埋め込む方法ができていないので、試行錯誤してます。

投稿2019/03/17 02:16

nonshi

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nonshi

2019/03/21 21:11

最終的に私の力ではpython関数を外部に置き、C++から持ってくる方法しかできませんでした。その時の時間は500msととても遅いです。どなたか参考になれば幸いです。 また、助言、回答してくださった方たちには感謝します。
hayataka2049

2019/03/21 21:14

どんな実装なのかわからないとコメントしづらいのでコード載せてほしいんですが、そもそも延々とここでやるより、一旦こちらは解決済みにして別質問を立てた方が良いのでは?
nonshi

2019/03/22 00:00

解決済みにするのを忘れていました。 そうですね、一回違うスレを立てようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問