python对称矩阵压缩及还原
正常情况下,矩阵的存储需要消耗n*n个存储单元,⽽对称存储只需要n×(n+1)/2个存储单元。当n较⼤时,节省下的存储单元⼗分可观。
借助numpy⽣成矩阵,在python中的实现代码:
import numpy as np
# 矩阵的阶数
N = 5
def get_matrix():
"""
创建⼀个5x5的随机整数矩阵
:return:
"""
return np.random.randint(1, 5, size=(N, N))
def tri(matrix, method="low"):
"""
保留矩阵的上三⾓或下三⾓
:param matrix:
:param method:
:return:
"""
il(matrix) if method == "low" iu(matrix)
def diag(matrix):
"""
⽣成对称矩阵
:param matrix:
:return:
"""
return matrix + matrix.T - np.diag(matrix.diagonal())
def init_list():
"""
根据矩阵维度⽣成⼀个⼀维数组存储对称矩阵数据
:return:
"""
return [0] * (int((N + 1) * N / 2))
def get_index(x, y):
"""
根据x,y获取对应列表中的索引, 计算公式为: x>=y时 x(x+1)/2 + y, x<y时 y(y+1)/2 + x
:param x:
:param y:
:return:
"""
if x >= y:
return x * (x + 1) // 2 + y
return y * (y + 1) // 2 + x
def save_to_list(index_array, r_list, r_mt):
"""
将数据存储到⼀维数组中
:param index_array:
:param r_list:
python获取数组长度:param r_mt:
:return:
"""
for index in range(len(r_list)):
x, y = index_array[1][index], index_array[0][index]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。