Существует ли какой-либо простой способ / команда в Python для двух (или трех) умножений матриц для получения ядра продукта, например, расширяется для сетки? Я имею в виду очки должны быть оценены для каждой комбинации сетки
У меня есть два решения, однако первое сделано с использованием циклов (в моем случае это неприемлемо), а другое выполняет изменение формы ввода перед умножением (жестко закодировано и работает для продукта из 2 ядер и нуждается в корректировках, если будет использоваться для 3,4 и др. Ядра).
Первое решение:
for xi, xg in enumerate(xgrid):
for yi, yg in enumerate(ygrid):
kde[xi, yi] = 1 / ndata * np.sum(kernel1(xg) * kernel2(yg))
Где kernel1 (xg) * kernel2 (yg) - это, например, вектор (1, 10000), где точки данных оцениваются в каждой точке сетки xg и yg. Таким образом, мы на самом деле строим продукт расчета сетки шаг за шагом.
Второе решение, где «fullkernel» уже является объектом оценки данных в сетке:
kde = np.zeros(shape=(98, 98)) # 98 is length of grid
X_out = np.repeat(fullkernel[0], len(fullkernel[0]), axis=0)
Y_out = np.tile(fullkernel[1], (len(fullkernel[1]), 1))
testing = 1 / len(fullkernel[0]) * np.sum(X_out * Y_out, axis=1)
f = np.reshape(testing.T, kde.shape)
форма полного ядра - (2, 98, 9999), где 2 - это два разных набора данных, 98 точек сетки и 9999 точек данных.
Итак, в конце мне нужна матрица размера (9604, 9999), которая похожа на X_out * Y_out в приведенном выше примере, но без изменения формы и разбиения исходных данных. Есть ли способ получить эту матрицу с помощью какой-либо команды, используя fullkernel [0] и fullkernel [1] только без каких-либо дополнительных приготовлений?