Skip to content

Instantly share code, notes, and snippets.

@iizukak
Created September 11, 2011 12:27
Show Gist options
  • Save iizukak/1209513 to your computer and use it in GitHub Desktop.
Save iizukak/1209513 to your computer and use it in GitHub Desktop.
generate haar wavelet basis
# -*- coding: utf-8 -*-
from numpy import *
print 'これはHaar Wavelet基底を生成するプログラムです。'
print '2^n次元の基底を生成します'
size = 2 ** input('nを入力してください(10以下を推奨): ')
n = size
#ノルムを計算する無名関数
norm2 = lambda l: sqrt(sum([i**2 for i in l]) / float(len(l)))
#期待値を計算する関数
exp = lambda l: sqrt(sum(l) / float(len(l)))
#ベクトルを正規化する関数
def normalize(l):
return map(lambda x: x / norm2(l), l)
#Waveletをシフトする関数
shift = lambda l, n: l[n:] + l[:n]
#スケーリング関数とウェーブレット関数のときに使うゼロで埋めたリストを生成
scale, zerolist, lowerlist = [], [], []
for i in range(n):
zerolist.append(0.0)
scale.append(1.0)
lowerlist.append(float("inf"))
print normalize(scale) #スケーリング関数を表示
#ここから、ウェーブレット関数を生成する
upperlist = zerolist[:]
alpha = 1
while n >= 2:
a = []
for i in range(n):
a.append(-1)
for i in range(n/2):
a[i] = 1
a = a + zerolist[n:]
a = normalize(a) #基底を正規化
print a #基底の表示
for p in range(size):
if upperlist[p] <= exp(a[:(p+1)]):
upperlist[p] = exp(a[:(p+1)])
#ウェーブレット関数をシフトする
for i in range(size/n):
if i > 0:
a = shift(a, -n)
alpha += 1
print a #シフトした基底を表示する
for p in range(size):
if upperlist[p] <= exp(a[:(p+1)]):
upperlist[p] = exp(a[:(p+1)])
alpha += 1
n = n/2
for i in range(size):
print i , upperlist[i]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment