diff --git a/lib/boxcount.py b/lib/boxcount.py index 89557ad..1450e30 100644 --- a/lib/boxcount.py +++ b/lib/boxcount.py @@ -1,4 +1,5 @@ import numpy as np +import pandas import pandas as pd from PIL import Image import matplotlib.pyplot as plt @@ -26,12 +27,33 @@ def blockshaped(data, square_size): square_size, square_size)) +def bc(df): + max_actual_radius = max(df.x.abs().max(), df.y.abs().max()) + + fb = [] + dims = [] + + for i in range(1, max_actual_radius * 2): + box_width = (max_actual_radius * 2) / i + total = i ** 2 + + filled = pd.DataFrame(data={ + 'xi': np.floor_divide(df.x, box_width), + 'yi': np.floor_divide(df.y, box_width), + }).drop_duplicates().shape[0] + + fb.append(filled) + dims.append(box_width) + + out = pd.DataFrame({'N': fb, 'w': dims}) + + return out[out.N != out.N.min()] + df = read_xy_alt( "/Users/joshuacoles/Developer/checkouts/jc3091/CompB DLA/data-analysis/data/alpha/1.csv" ) -max_actual_radius = max(df.x.abs().max(), df.y.abs().max()) max_radius = int(np.exp2(np.floor(np.log2(max_actual_radius)) + 1)) data = np.zeros((max_radius * 2, max_radius * 2)) data[df.x + max_radius, df.y + max_radius] = 1 @@ -39,16 +61,12 @@ data[df.x + max_radius, df.y + max_radius] = 1 iterations = int(np.floor(np.log2(max_actual_radius)) + 1) sizes = 2 ** np.arange(1, iterations) -fb = [] -dims = [] - for size in sizes: filled_box = np.sign(blockshaped(data, size).sum(axis=(1, 2))).sum() fb.append(filled_box) dims.append(size / np.exp2(iterations)) - class ImageFractalDimension: def __init__(self, image_name, SIZE): self.SIZE = SIZE