给定大小为n的矩阵,计算到中心的距离矩阵

时间:2018-09-30 16:37:40

标签: python arrays matrix

假设我有一个大小为n(奇数不为1)的矩阵,我想计算每个条目距中心的距离。例如,如果n = 2,则矩阵为5 x 5,并找到矩阵的中心。

import numpy as np
import math
center = math.floor(5/2)
Matrix[math.floor(5/2)][math.floor(5/2)] = 0

中心为零,因为到自身的距离为0。我的方法是使中心像坐标平面的原点一样,将25个“正方形”(5×5矩阵)中的每一个都当作点作为中心。每个正方形,然后计算该点距中心的欧式距离。视觉上: enter image description here

到目前为止我的想法。

Matrix = [[0 for x in range(n)] for y in range(n)] #initialize the n by n matrix
for i in range(0, n):
    for j in range(0, n):
        Matrix[i][j] = ...

还是找到距离矩阵的更好方法?

输出应该是对称的,对于n = 5的矩阵,它应该是

Matrix
[[2.82843, 2.23607, 2, 2.23607, 2.82843],
 [2.23607, 1.41421, 1, 1.41421, 2.23607],
 [2, 1, 0, 1, 2],
 [2.23607, 1.41421, 1, 1.41421, 2.23607],
 [2.82843, 2.23607, 2, 2.23607, 2.82843]]

TIA

2 个答案:

答案 0 :(得分:1)

答案是毕达哥拉斯著名定理:https://www.mathsisfun.com/pythagoras.html 对于(i,j)处的像元,您需要向中心像元偏移(x,y)-然后应用毕达哥拉斯定理计算到该像元的距离...

def pythag(a, b):
    return math.sqrt(a*a + b*b)

n = 5
import math
center = math.floor(n/2)
for i in range(0, n):
    for j in range(0, n):
      dist = pythag(i-center, j-center)
      print(dist)

以下是代码:https://repl.it/@powderflask/DizzyValuableQuark

答案 1 :(得分:0)

在使用numpy时尝试避免循环:

x_size, y_size = 5, 5
x_arr, y_arr = np.mgrid[0:x_size, 0:y_size]
cell = (2, 2)
dists = np.sqrt((x_arr - cell[0])**2 + (y_arr - cell[1])**2)