Python 计算距中心的距离矩阵,给出大小为n的矩阵
假设我有一个大小为n的矩阵(不是1的奇数),我想计算每个条目到中心的距离。例如,如果n=2,那么矩阵是5乘5,要找到矩阵的中心,您需要做Python 计算距中心的距离矩阵,给出大小为n的矩阵,python,arrays,matrix,Python,Arrays,Matrix,假设我有一个大小为n的矩阵(不是1的奇数),我想计算每个条目到中心的距离。例如,如果n=2,那么矩阵是5乘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矩阵)中的每一个视为每个正方形中心的一个点,然后计算点到中心
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答案是毕达哥拉斯著名的定理: 对于(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)
下面是一个repl,其代码为:在使用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)