生成对称矩阵是一个经常被需要的操作,Python中可以非常方便地实现对称矩阵的生成,下面给出完整的攻略:
1. 确定矩阵大小
首先需要确定生成的对称矩阵的大小,假设为 n
。
2. 构造数组
根据对称矩阵的特点,只需要构造矩阵的上(下)三角矩阵即可,这里假设使用一维数组来存储上三角矩阵,数组大小为 n * (n + 1) // 2
。
假设要生成的矩阵是:
1 2 3
2 4 5
3 5 6
只需构造上三角矩阵的数组为 [1, 2, 3, 4, 5, 6]
。
对于一个给定的下标 (i, j)
,因为矩阵是对称的,所以 A[i][j] = A[j][i]
,对应的上三角矩阵的下标为 i * n + j - i * (i + 1) // 2
。
例如,对于上面矩阵中的下标 (1, 2)
,由于 1 < 2
,所以对应的上三角矩阵的下标为 1 * 3 + 2 - 1 * (1 + 1) // 2 = 3
。
3. 生成对称矩阵
最后,根据构造好的上三角矩阵数组,构造对称矩阵即可。
import numpy as np
def gen_symmetric_matrix(arr):
n = int((len(arr) * 2) ** 0.5 - 0.5)
mat = np.zeros((n, n))
for i in range(n):
for j in range(i+1):
val = arr[i * n + j - i * (i + 1) // 2]
mat[i][j] = val
mat[j][i] = val
return mat
其中 np.zeros()
用于生成全 0 矩阵,然后根据上三角矩阵的数组填充矩阵,最后返回结果即可。
例如,生成一个3x3的矩阵:
arr = [1, 2, 3, 4, 5, 6]
mat = gen_symmetric_matrix(arr)
print(mat)
输出的结果为:
[[1. 2. 3.]
[2. 4. 5.]
[3. 5. 6.]]
再例如,生成一个4x4的矩阵:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
mat = gen_symmetric_matrix(arr)
print(mat)
输出的结果为:
[[ 1. 2. 3. 4.]
[ 2. 5. 6. 7.]
[ 3. 6. 8. 9.]
[ 4. 7. 9. 10.]]
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现由数组生成对称矩阵 - Python技术站