python - 如何在没有任何库的情况下计算特征值和特征向量
问题描述
我正在尝试使用纯 Python 代码实现 PCA。我有一个 CSV 文件我从 CSV 读取所有列和行并将其更改为矩阵形式然后我计算并找到矩阵的均值和协方差,现在我正在尝试编写一个函数来查找我的协方差矩阵的特征值和特征向量.
我的问题是如何解决这部分来找到特征值和特征向量?对于这一步,我有一个函数来查找矩阵的行列式,但问题是这里的 lambda 符号 (x) --- (A-λI)=0。
矩阵的平均值
24 24 25 26 26
协方差矩阵 (sum(x-Xb) * (y - Yb))/n-1
175 151 162 173 172
151 185 177 177 177
162 177 222 195 192
173 177 195 234 200
172 177 192 200 238
身份矩阵
x 0 0 0 0
0 x 0 0 0
0 0 x 0 0
0 0 0 x 0
0 0 0 0 x
175-x 151 162 173 172
151 185-x 177 177 177
162 177 222-x 195 192
173 177 195 234-x 200
这是我的行列式代码,现在如何更改下面的代码来计算上面的(A-λI)矩阵?
def getCofactor(mat,temp, p,q,n):
i = 0
j = 0
for row in range(n):
for col in range(n):
if (row != p and col != q):
temp[i][j] = mat[row][col]
j+=1
if (j == n - 1):
j = 0
i+=1
return temp
def determinantOfMatrix(mat,n):
D = 0 # Initialize result
if (n == 1):
return mat[0][0]
temp = [[[] for x in range(n)] for y in range(n)]
sign = 1;
for f in range(n):
getCofactor(mat, temp, 0, f, n)
D += sign * mat[0][f] * determinantOfMatrix(temp, n - 1);
sign = -sign;
return D
解决方案
推荐阅读
- sql - 如何将 SELECT 的结果分配为 sql 中的表列?
- python - 如何自动查找和替换 JSON 属性?
- spring - JdbcTemplate:如何读取大表?
- scala - 将 case 对象字面量声明为其父类型?
- oracle - Oracle - 按先验连接
- google-maps - Ionic Android 使用标记和标签打开 Google 地图
- apache-spark - Spark:如何将单个行以 JPG 格式写入 S3/HDFS
- javascript - 把手 - 但是将一个数组中的所有元素作为一个元素的值推入另一个数组
- html - 图像周围出现奇怪的边框
- r - 使用 transpose 和 group_split 在 excel 中解析数据