前提
Windows10
Visual Studio Code
Pythonでボックスカウント法によるフラクタル次元解析を行っています。
コードは完成しているのですが、解析時間が長くなってしまいます。
実現したいこと
解析時間を短縮したいです。
可能であればコードの簡略化もしたいです。
該当のソースコード
import pandas as pd import cv2 import numpy as np FILEPATH ='C:/python_workspace/dummy/dummy.csv' #csvデータのあるディレクトリ df = pd.read_csv(FILEPATH,index_col=None,header=None) #1×1 boxsize = 1 #ボックスサイズの指定 size = boxsize + 1 #区切るサイズ col1 = 0 #ボックスの最初の列 col2 = size #ボックスの最後の列 row1 = 0 #ボックスの最初の行 row2 = size #ボックスの最後の行 Max =[] #ボックスごとの最大値 Min =[] #ボックスごとの最小値 for num in range(128): #分割するボックスの個数を指定 col1 =0 col2 = size for div_col in range(128): block = df.iloc[row1:row2, col1:col2] max = np.max(np.max(block)) min = np.min(np.min(block)) Max.append(max) Min.append(min) col1 = col1 + boxsize col2 = col2 + boxsize row1 = row1 + boxsize row2 = row2 + boxsize boxcount1 = (((np.array(Max)-np.array(Min)) // (0.0025*boxsize))+1).sum() #ボックスカウント #以降ボックスサイズを2,4,8,16,32,64,128まで増やし同様の作業を行う
試したこと
def文で簡略化しようとしましたがfor文に変数を代入できないため上手くできませんでした。
補足情報(FW/ツールのバージョンなど)
CSVデータの中身はxy等間隔座標の130×130の縦横配列データで、インデックス、ヘッダーともに無しです。
for文で行っている作業は以下の通りです。(ボックスサイズ1のとき)
・x座標0~1,y座標0~1の4つのデータを一つのボックスとして切り出す。
・次のボックスの座標はx座標1~2、y座標0~1の4つのデータなので、その時の座標を指定する。
・x座標128まで来たら一段下、つまりy座標1~2に移動し、再びx座標0から128まで分割し続ける。
・これをx座標128、y座標128になるまで繰り返す。
この作業は、私が調べた限りでは既存のライブラリで代替できませんでした。
これをdef文で簡略化しようとすると、for文のrange関数の引数をボックスサイズごとに変更する必要があり、ここで詰まりました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/08 01:34