Рассчитать матрицу расстояний от центра с учетом матрицы размера n - PullRequest
0 голосов
/ 30 сентября 2018

допустим, у меня есть матрица размера 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. myподход заключается в том, чтобы сделать центр, как начало координатной плоскости, и обработать каждый из 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] = ...

или есть лучший способ найти матрицу расстояний?

вывод должен быть симметричным и для матрицы = 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 голосов
/ 01 октября 2018

Старайтесь избегать циклов при использовании 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)
0 голосов
/ 30 сентября 2018

Ответом является известная теорема Пифагора: 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

...