Предположим, что у меня есть три произвольных 1D массива, например:
x_p = np.array((1.0, 2.0, 3.0, 4.0, 5.0))
y_p = np.array((2.0, 3.0, 4.0))
z_p = np.array((8.0, 9.0))
Эти три массива представляют интервалы выборки в трехмерной сетке, и я хочу построить 1D-массив трехмерных векторов для всех пересечений, что-то вроде
points = np.array([[1.0, 2.0, 8.0],
[1.0, 2.0, 9.0],
[1.0, 3.0, 8.0],
...
[5.0, 4.0, 9.0]])
Заказ на самом деле не имеет значения. Очевидный способ их создания:
npoints = len(x_p) * len(y_p) * len(z_p)
points = np.zeros((npoints, 3))
i = 0
for x in x_p:
for y in y_p:
for z in z_p:
points[i, :] = (x, y, z)
i += 1
Итак, вопрос... есть ли более быстрый способ? Я посмотрел, но не нашел (возможно, просто не удалось найти правильные ключевые слова Google).
В настоящее время я использую это:
npoints = len(x_p) * len(y_p) * len(z_p)
points = np.zeros((npoints, 3))
i = 0
nz = len(z_p)
for x in x_p:
for y in y_p:
points[i:i+nz, 0] = x
points[i:i+nz, 1] = y
points[i:i+nz, 2] = z_p
i += nz
но я чувствую, что мне не хватает какого-нибудь умного способа Numpy?