Матрица, в которой строки являются координатами точек сетки - PullRequest
0 голосов
/ 22 ноября 2018

В этом уроке Я нахожу код, подобный

import numpy as np
x = np.linspace(-5, 5, 20)
y = np.linspace(-1, 1, 10)
Y, X = np.meshgrid(y, x) 
xy = np.vstack([X.ravel(), Y.ravel()]).T
print(xy)

Нет ли более короткого способа получить матрицу, где строки - это координаты точек сетки, чемиспользуя meshgrid + vstack + ravel + transpose?

Выход:

[[-5.         -1.        ]
 [-5.         -0.77777778]
 [-5.         -0.55555556]
 [-5.         -0.33333333]
 [-5.         -0.11111111]
 [-5.          0.11111111]
 [-5.          0.33333333]
 [-5.          0.55555556]
 [-5.          0.77777778]
 [-5.          1.        ]
 [-4.47368421 -1.        ]
 [-4.47368421 -0.77777778]
 ...

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вот реализация с методами repeat и tile.

import numpy as np

x = np.linspace(-5, 5, 20)
y = np.linspace(-1, 1, 10)
xy = np.empty((len(x) * len(y), 2))
xy[:, 0] = np.repeat(x, len(y))
xy[:, 1] = np.tile(y, len(x))
print(xy)

Я полагаю, что метод meshgrid использует тот же подход для заполнения матрицы результатов.

0 голосов
/ 22 ноября 2018

Вы можете пропустить meshgrid и получить то, что вам нужно, напрямую, просто взяв декартово произведение из x и y:

from itertools import product
import numpy as np

x = np.linspace(-5, 5, 20)
y = np.linspace(-1, 1, 10)
xy = np.array(list(product(x,y)))
print(xy)

Выход:

[[-5.         -1.        ]
 [-5.         -0.77777778]
 [-5.         -0.55555556]
 [-5.         -0.33333333]
 [-5.         -0.11111111]
 [-5.          0.11111111]
 [-5.          0.33333333]
 [-5.          0.55555556]
 [-5.          0.77777778]
 [-5.          1.        ]
 [-4.47368421 -1.        ]
 [-4.47368421 -0.77777778]
 [-4.47368421 -0.55555556]
 [-4.47368421 -0.33333333]
...
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...