# Fractal Dimension Computation in Python Code

Huaiyu Zhu hzhu at users.sourceforge.net
Sat Sep 30 04:37:35 CEST 2000

```On Fri, 29 Sep 2000 20:01:10 -0000, Jake Speed <speed@?.com> wrote:
>
>And having said that, here's an updated version.  Note
>that in the examples the points aren't limited to the
>0.0 -> 1.0 range anymore.

Hi,

I've changed your code to use Numeric module so that it is applicable to any
dimension of the containing space.  This can also be used as a module.

"""
fractaldim2.py - calculate fractal dimensions
Adopted by Huaiyu Zhu from

From: speed@?.com (Jake Speed)
Newsgroups: comp.lang.python
Subject: Re: Fractal Dimension Computation in Python Code
Date: Fri, 29 Sep 2000 20:01:10 -0000
"""

from math import log
from Numeric import *

def N(points, scale):
"""Return (num of coverage, scale) of points by boxes of size 1/scale"""
unique = {}
for point in points:
box = tuple((point * scale).astype(Int))
unique[box] = 1
return float(len(unique)), scale

def dim(points):
""" Calculate dimensions of points at various scale = 2**level"""
f0 = 1, 1
for level in xrange(1, 12):
f1 = N(points, 2.0**level)
dim = log(f1/f0) / log(f1/f0)
print "%2d:  %.4g" % (level, dim)
f0 = f1

M = array([[0,-1], [1,0]]) * sqrt(3)/2

def makekoch(x1, x2, level, flist=[]):
""" Return a list of points on Koch curve, subdivided levels """
if level == 0: return flist
xd = (x2 - x1) / 3.
xa = x1 + xd
xb = x2 - xd
xm = (x1 + x2) / 2.0 - matrixmultiply(M, xd)
flist.append(xa)
makekoch(x1, xa, level-1, flist)
makekoch(xa, xm, level-1, flist)
flist.append(xm)
makekoch(xm, xb, level-1, flist)
makekoch(xb, x2, level-1, flist)
flist.append(xb)
return flist

#------------------------------------------------------------------
if __name__ == "__main__":
print "line dimension"
x = (arange(100)/100.)[:,NewAxis]
dim(x)

print "plane dimension"
list2d = []
for x in xrange(100):
for y in xrange(100):
list2d.append(array((x, y))/100.0)
dim(list2d)

print "space dimension"
list3d = []
for x in xrange(30):
for y in xrange(30):
for z in xrange(30):
list3d.append(array((x, y, z))/30.0)
dim(list3d)

print "koch dimension"
listkoch = makekoch(array((0,0)), array((1,0)), 7)
dim(listkoch)

--
Huaiyu Zhu                       hzhu at users.sourceforge.net
Matrix for Python Project        http://MatPy.sourceforge.net

```

More information about the Python-list mailing list