-
Notifications
You must be signed in to change notification settings - Fork 1
/
eig.py
29 lines (22 loc) · 749 Bytes
/
eig.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# source: https://github.com/kpuputti/eigenfaces/blob/master/eigvals.py
import itertools
import json
import numpy
import operator
import sys
def eigvals_json(data):
eigvals, eigvectors = numpy.linalg.eig(numpy.array(data))
eigdata = [(e[0], e[1]) for e in itertools.izip(eigvals.real, eigvectors.real)]
eigdata.sort(key=lambda x: abs(x[0]), reverse=True)
return {
'eigenvalues': [e[0] for e in eigdata],
'eigenvectors': [e[1].tolist() for e in eigdata],
}
def main(args):
if len(args) != 1:
sys.stderr.write('bad arguments\n')
return 1
data = json.loads(open(args[0]).read())
print json.dumps(eigvals_json(data))
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]) or 0)