Генерация точек на границе поля произвольной размерности в Python - PullRequest
0 голосов
/ 18 апреля 2020

Мне нужна функция, принимающая в качестве входных данных целочисленное измерение и возвращающая список точек (то есть список списков, каждый из которых имеет число координат, равное указанному измерению ) на границе прямоугольника данного измерения (где, для ясности, граница двумерного прямоугольника является пустым квадратом, а граница трехмерного прямоугольника является объединением граней кости, et c.).

Фактическое количество возвращаемых точек и размер поля не имеют решающего значения, они просто зависят от выбранной плотности и размера сетки, и в следующем примере я просто фиксирую их на числе; меня волнует измерение пространства, в котором живут эти точки.

Это явный двумерный случай того, чего я хочу достичь.

import numpy as np
import matplotlib.pyplot as plt

def bound(): 
    X,Y=np.linspace(0,1,3),np.linspace(0,1,3)
    points=[]
    for x in X:
        if x==0 or x==1:
            for y in Y: points.append([x,y])
        else:
            for y in [Y[0],Y[-1]]: points.append([x,y])
    return points

P = bound()
print(P)

Это дает список 2D точек

[[0.0, 0.0], [0.0, 0.5], [0.0, 1.0], [0.5, 0.0], [0.5, 1.0], [1.0, 0.0], [1.0, 0.5], [1.0, 1.0]]

, которые могут быть нанесены на

plt.plot(*zip(*P), 'ko')
plt.show()

2D_points_plot

Я знаю meshgrid позволяет легко построить это, но мне нужен актуальный список точек. Как мне написать функцию

def bound(dim):
    ...
    return points

в произвольном измерении?

Метод моего 2D-примера очень грязный и ручной, я уверен, что есть гораздо более питон c (и, вероятно, супер простой) способ получить это. Я пробовал с zip, *, meshgrid на разных модах, но безуспешно. Любое предложение?

...