嗨,我想建立一个尺寸为10 x 10的距离矩阵,并生成了一个包含45个实数的值列表,以填充10 x 10矩阵。距离矩阵也称为对称矩阵,它是矩阵另一面的镜像。我目前的情况是我有45个值,我想知道如何创建距离矩阵(对角线部分填充0)并创建镜像矩阵以形成完整的距离矩阵。
例如,
1,2,4,3,5,6
输出:
0,1,2,4
1,0,3,5
2,3,0,6
4,5,6,0
感谢。
假设您要创建任意大小的距离矩阵:
import math
def distance_matrix(pattern):
# to get the side length, solve for n where len(pattern) = n*(n + 1)/2 (triangular number formula)
side_length = (int(math.sqrt(1 + 8 * len(pattern))) - 1) // 2 + 1
assert (side_length * (side_length - 1)) // 2 == len(pattern), "Pattern length must be a triangular number."
# create the grid
grid = [[0] * side_length for i in range(side_length)]
# fill in the grid
position = 0
for i in range(0, side_length - 1):
for j in range(0, side_length - 1 - i):
element = pattern[position]; position += 1
grid[i][i + j + 1] = element # fill in the upper triangle
grid[i + j + 1][i] = element # fill in the lower triangle
return grid
def matrix_to_string(matrix): return "\n".join("\t".join(str(x) for x in row) for row in distance_matrix([1, 2, 4, 3, 5, 6]))
if __name__ == "__main__":
print(matrix_to_string(distance_matrix([1, 2, 4, 3, 5, 6])))
编辑:边长必须为int。否则,您将收到此错误:'float'对象不能解释为整数。解决方法是添加楼层划分运算符\。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句