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

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

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

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

Q&A

解決済

2回答

297閲覧

C⇒pythonへのコンバート方法について

ojioji

総合スコア11

Python 3.x

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

0グッド

0クリップ

投稿2018/02/07 06:56

前提・実現したいこと

Pyhton初心者です。
該当ソースは、C言語で作成されているのですが、pythonへコンバートした際の記述が不明な為、ご教授をお願いいたします。
主に「fread( &buf, sizeof( unsigned short int ), 1, fp )」の個所と多次元配列の「buf」の取り扱いがpyton上
どのように記述するのか理解できておりません。

該当のソースコード

int width = 画像サイズ(幅);
int hight = 画像サイズ(高さ);
int filecount = ファイル件数;
float *tmp = NULL;
float ***tmp2 = NULL
FILE *fp;
char fpath = イメージ画像のパス
unsigned short int buf;

//tmp 用メモリの確保
tmp = (float*)calloc( width * hight, sizeof( float ) );

//tmp2 用メモリの確保
(tmp2) = (float**)calloc( filecount, sizeof( float ** ) );
for( i = 0 ; i < filecount ; i++ ){
-(tmp2)[i] = (float*)calloc( lines, sizeof( float * ) );
-for( j = 0 ; j < hight ; j++ ){
--(tmp2)[i][j] = (float)calloc( width, sizeof( float ) );
-}
}

for( i = 0 ; i < filecount ; i++ ){
-fp = fopen( fpath, "rb" );

-for( j = 0 ; j < hight ; j++ ){
--for( k = 0 ; k < width ; k++ ){
---fread( &buf, sizeof( unsigned short int ), 1, fp );
---if( buf != 0 ){
----tmp[jwidth+k] = (float)( 10.0 * log10( (double)(bufbuf) ) - 83.0 );
---}
--}
-}

-for( j = 0 ; j < (3/2) ; j++ ){
--for( k = 0 ; k < width ; k++ ){
---(tmp2)[i][j][k] = tmp[jwidth+k];
--}
-}
}

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

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

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

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

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

ojioji

2018/02/07 07:16

ご指摘ありがとうございます。以後、注意させていただきます。
fuzzball

2018/02/07 07:20

以後じゃなくて今からやって下さい。
ojioji

2018/02/07 07:58

修正させていただきました
guest

回答2

0

ベストアンサー

主に「fread( &buf, sizeof( unsigned short int ), 1, fp )」の個所

今一度前回の質問の回答を参照ください。
そのうえで、sizeof( unsigned short int )のサイズによりますが
H(=unsigned short) か I=(unsigned int)でよいかと思います。
元データのエンディアンは分かりませんのでご自身で確認ください。

多次元配列の「buf」の取り扱い

pythonではintfloatなどの実値を格納する多次元リスト(配列のようなもの)を簡単に作成できます。
参考:Pythonでの多次元配列の定義方法

以下は簡単なサンプルです。これを参考にご自身のコードに組み込んでみてください。

Python

1L,M,N = 3,4,5 # 配列のサイズ 2 3# 指定サイズの1,2,3次元リスト(配列)を作成 4arr1 = [float(0) for i1 in range(L)] 5arr2 = [[float(0) for i2 in range(M)] for i1 in range(L)] 6arr3 = [[[float(0) for i3 in range(N)] for i2 in range(M)] for i1 in range(L)] 7 8arr1[1] = 123.0 9arr2[1][2] = 456.0 10arr3[1][2][3] = 789.0 11 12import pprint 13pp = pprint.PrettyPrinter(indent=4) 14pp.pprint(arr1) 15pp.pprint(arr2) 16pp.pprint(arr3)

投稿2018/02/07 07:27

can110

総合スコア38234

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

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

ojioji

2018/02/07 12:59

丁寧なサンプルまでご提示いただきありがとうございます。
guest

0

質問文のソースコードのコメントを見て気になったのでここに回答します。

C

1int width = 画像サイズ(); 2int hight = 画像サイズ(高さ);

画像処理を行うなら、Pillowopencvなどの画像処理ライブラリで処理を行ってみてはどうでしょうか?
ある程度は自力で調べる力は必要になりますが。

投稿2018/02/07 13:18

umyu

総合スコア5846

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問