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矩阵)中的每一个都当作点作为中心。每个正方形,然后计算该点距中心的欧式距离。视觉上:
到目前为止我的想法。
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
答案 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)
答案 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)