Как объединить точки сетки сетки из двух прямоугольников в Python? - PullRequest
0 голосов
/ 14 мая 2018

Мне нужно объединить сетки сетки, образованные в двух разных (смежных) прямоугольниках.Ниже приведено графическое представление прямоугольника:

enter image description here

Я могу создать сетку из отдельных прямоугольников.Например, для зеленого прямоугольника, используя следующий фрагмент кода, мы можем создать сетку сетки.

xvalues = np.array([0, 2, 4, 6, 8, 10])
yvalues = np.array([6, 8, 10, 12])
x, y = np.meshgrid(xvalues, yvalues)
positions = np.vstack([x.ravel(), y.ravel()])
theGridPoints = (np.array(positions)).T

Я могу также сделать точки сетки для синего прямоугольника.Однако я не могу присоединиться к ним внутри одного объекта.Я попытался присоединиться к ним как сумма position1 и position2.Я получаю ошибку значения на консоли:

ValueError: operands could not be broadcast together with shapes (.,.) (.,.)

Как я могу ее решить?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 мая 2018
import numpy as np
import matplotlib.pyplot as plt

bx, by = np.mgrid[0:2, 0:5]
gx, gy = np.mgrid[0:10, 5:12]

bp = np.vstack((bx.ravel(), by.ravel()))
gp = np.vstack((gx.ravel(), gy.ravel()))

points = np.hstack((bp, gp)).T

# full grid
plt.scatter(points[:,0], points[:,1], c='orange', s=200)
# green rectangle
plt.scatter(gp.T[:,0], gp.T[:,1], c='green', s=50)
# blue rectangle
plt.scatter(bp.T[:,0], bp.T[:,1], c='blue', s=50)

plt.show()

enter image description here

0 голосов
/ 14 мая 2018

Если вы хотите объединить / объединить несколько np.ndarray, они должны быть одинаковыми shape. Таким образом, число xvalues синего прямоугольника должно быть равно числу xvalues зеленого прямоугольника. То же самое для yvalues. Вот краткий пример:

xvalues_b = np.array([0, 1, 2, 3, 4, 5])
yvalues_b = np.array([0, 1*5/3, 2*5/3, 3*5/3])
x_b, y_b = np.meshgrid(xvalues_b, yvalues_b)
positions_b = np.vstack([x_b.ravel(), y_b.ravel()])
theGridPoints_b = (np.array(positions_b)).T
positions_gb = np.concatenate([positions, positions_b])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...