1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- from __future__ import division, print_function, absolute_import
- from subprocess import Popen, PIPE, STDOUT
- import numpy as np
- SZ = [2, 3, 4, 8, 12, 15, 16, 17, 32, 64, 128, 256, 512, 1024]
- def gen_data(dt):
- arrays = {}
- if dt == np.double:
- pg = './fftw_double'
- elif dt == np.float32:
- pg = './fftw_single'
- else:
- raise ValueError("unknown: %s" % dt)
- # Generate test data using FFTW for reference
- for type in [1, 2, 3, 4, 5, 6, 7, 8]:
- arrays[type] = {}
- for sz in SZ:
- a = Popen([pg, str(type), str(sz)], stdout=PIPE, stderr=STDOUT)
- st = [i.strip() for i in a.stdout.readlines()]
- arrays[type][sz] = np.fromstring(",".join(st), sep=',', dtype=dt)
- return arrays
- # generate single precision data
- data = gen_data(np.float32)
- filename = 'fftw_single_ref'
- # Save ref data into npz format
- d = {'sizes': SZ}
- for type in [1, 2, 3, 4]:
- for sz in SZ:
- d['dct_%d_%d' % (type, sz)] = data[type][sz]
- d['sizes'] = SZ
- for type in [5, 6, 7, 8]:
- for sz in SZ:
- d['dst_%d_%d' % (type-4, sz)] = data[type][sz]
- np.savez(filename, **d)
- # generate double precision data
- data = gen_data(np.float64)
- filename = 'fftw_double_ref'
- # Save ref data into npz format
- d = {'sizes': SZ}
- for type in [1, 2, 3, 4]:
- for sz in SZ:
- d['dct_%d_%d' % (type, sz)] = data[type][sz]
- d['sizes'] = SZ
- for type in [5, 6, 7, 8]:
- for sz in SZ:
- d['dst_%d_%d' % (type-4, sz)] = data[type][sz]
- np.savez(filename, **d)
|