寒假在家,闲来无事,摆烂之余,写了一个基于python numpy的矩阵标准化算法,适用于任意对称阵的标准化(由于规范化很简单就做)。
没用用到任何高级的东西,就是遍历循环按照矩阵的初等变换来标准化,可能效率不是很高,但是除非大型矩阵(几万几百万那种的),一般能见到的矩阵就是秒出结果,当数据较少或较小时算法间的差别并不大(基本没有什么区别)
代码如下:
1 import numpy as np
2
3 a = np.array(eval(input('请输入矩阵:')), dtype=np.float16)
4 x = len(a)
5 print('原矩阵:\n',a)
6 for n in range(x):
7 if a[n, n] == 0 and n != x - 1:
8 v = 0
9 for i in range(x):
10 v = v + a[n, i]
11 if v == 0:
12 continue
13 else:
14 for i in range(x):
15 if a[n, i] == 0:
16 continue
17 else:
18 for p in range(x):
19 a[int(f'{p}'), int(f'{n}')] -= a[int(f'{p}'), int(f'{i}')]
20 for p in range(x):
21 a[int(f'{n}'), int(f'{p}')] -= a[int(f'{i}'), int(f'{p}')]
22 break
23 for i in range(n + 1, x):
24 xi_shu = a[n, i] / a[n, n]
25 for p in range(x):
26 a[int(f'{p}'), int(f'{i}')] -= a[int(f'{p}'), int(f'{n}')] * xi_shu
27 for p in range(x):
28 a[int(f'{i}'), int(f'{p}')] -= a[int(f'{n}'), int(f'{p}')] * xi_shu
29 else:
30 for i in range(n + 1, x):
31 xi_shu = a[n, i] / a[n, n]
32 for p in range(x):
33 a[int(f'{p}'), int(f'{i}')] -= a[int(f'{p}'), int(f'{n}')] * xi_shu
34 for p in range(x):
35 a[int(f'{i}'), int(f'{p}')] -= a[int(f'{n}'), int(f'{p}')] * xi_shu
36 print('标准化矩阵:\n',a)