Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算距中心的距离矩阵,给出大小为n的矩阵_Python_Arrays_Matrix - Fatal编程技术网

Python 计算距中心的距离矩阵,给出大小为n的矩阵

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矩阵)中的每一个视为每个正方形中心的一个点,然后计算点到中心

假设我有一个大小为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矩阵)中的每一个视为每个正方形中心的一个点,然后计算点到中心的欧几里德距离。视觉上:

到目前为止,我的想法是

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)