Мне нужна функция, принимающая в качестве входных данных целочисленное измерение и возвращающая список точек (то есть список списков, каждый из которых имеет число координат, равное указанному измерению ) на границе прямоугольника данного измерения (где, для ясности, граница двумерного прямоугольника является пустым квадратом, а граница трехмерного прямоугольника является объединением граней кости, 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()
Я знаю meshgrid
позволяет легко построить это, но мне нужен актуальный список точек. Как мне написать функцию
def bound(dim):
...
return points
в произвольном измерении?
Метод моего 2D-примера очень грязный и ручной, я уверен, что есть гораздо более питон c (и, вероятно, супер простой) способ получить это. Я пробовал с zip
, *
, meshgrid
на разных модах, но безуспешно. Любое предложение?