root / ETSN / MyDFT_1.py @ 297
Historique | Voir | Annoter | Télécharger (1,27 ko)
1 | 270 | equemene | #!/usr/bin/env python3
|
---|---|---|---|
2 | 270 | equemene | |
3 | 270 | equemene | import numpy as np |
4 | 270 | equemene | import pyopencl as cl |
5 | 270 | equemene | |
6 | 270 | equemene | # Naive Discrete Fourier Transform
|
7 | 270 | equemene | def MyDFT(x,y): |
8 | 270 | equemene | from numpy import pi,cos,sin |
9 | 270 | equemene | size=x.shape[0]
|
10 | 270 | equemene | X=np.zeros(size).astype(np.float32) |
11 | 270 | equemene | Y=np.zeros(size).astype(np.float32) |
12 | 270 | equemene | for i in range(size): |
13 | 270 | equemene | for j in range(size): |
14 | 270 | equemene | X[i]=X[i]+x[j]*cos(2.*pi*i*j/size)-y[j]*sin(2.*pi*i*j/size) |
15 | 270 | equemene | Y[i]=Y[i]+x[j]*sin(2.*pi*i*j/size)+y[j]*cos(2.*pi*i*j/size) |
16 | 270 | equemene | return(X,Y)
|
17 | 270 | equemene | |
18 | 270 | equemene | import sys |
19 | 270 | equemene | import time |
20 | 270 | equemene | |
21 | 270 | equemene | if __name__=='__main__': |
22 | 270 | equemene | |
23 | 270 | equemene | # Size of input vectors definition based on stdin
|
24 | 270 | equemene | import sys |
25 | 270 | equemene | try:
|
26 | 270 | equemene | SIZE=int(sys.argv[1]) |
27 | 270 | equemene | print("Size of vectors set to %i" % SIZE)
|
28 | 270 | equemene | except:
|
29 | 271 | equemene | SIZE=256
|
30 | 270 | equemene | print("Size of vectors set to default size %i" % SIZE)
|
31 | 270 | equemene | |
32 | 270 | equemene | a_np = np.ones(SIZE).astype(np.float32) |
33 | 270 | equemene | b_np = np.ones(SIZE).astype(np.float32) |
34 | 270 | equemene | |
35 | 271 | equemene | C_np = np.zeros(SIZE).astype(np.float32) |
36 | 271 | equemene | D_np = np.zeros(SIZE).astype(np.float32) |
37 | 271 | equemene | C_np[0] = np.float32(SIZE)
|
38 | 271 | equemene | D_np[0] = np.float32(SIZE)
|
39 | 271 | equemene | |
40 | 270 | equemene | # Native Implementation
|
41 | 270 | equemene | TimeIn=time.time() |
42 | 270 | equemene | c_np,d_np=MyDFT(a_np,b_np) |
43 | 270 | equemene | NativeElapsed=time.time()-TimeIn |
44 | 270 | equemene | NativeRate=int(SIZE/NativeElapsed)
|
45 | 270 | equemene | print("NativeRate: %i" % NativeRate)
|
46 | 271 | equemene | print("Precision: ",np.linalg.norm(c_np-C_np),np.linalg.norm(d_np-D_np)) |