Мне нужно сделать средневзвешенное значение, используя две матрицы - PullRequest
0 голосов
/ 28 февраля 2020

Я не программист, я биолог и мне нужно сделать следующее с двумя матрицами:

matrix_de_pesos= np.array([[0.1, 0.2, 0.3],[0.4, 0.5, 0.6],[0.7, 0.8, 0.9]])
matrix_de_embeddings= np.array([[1,2,3],[4,5,6],[7,8,9],[10,20,30]])

Одна матрица содержит веса, а другая - вложения. Мне нужно умножить каждый элемент каждого столбца матрицы весов на каждый столбец вложения матрицы. Затем составьте сумму векторов и поделите между собой сумму столбца матрицы вложений.

Я делаю это следующим образом:

n=[]
for j in range(matrix_de_pesos.shape[1]):
    auxiliar = np.zeros((matrix_de_embeddings.shape[0], matrix_de_embeddings.shape[1]))
    for i in range(matrix_de_pesos.shape[0]):
        for x in range(matrix_de_embeddings.shape[0]):
            auxiliar[x][i] = matrix_de_pesos[i][j]*matrix_de_embeddings[x][i]
    resultado = np.sum(auxiliar,axis=1)/auxiliar.shape[1]
    n.append(resultado)
matrix_final = np.array(n)
matrix_final = matrix_final.T
print(matrix_final)

Результат:

[[ 1.   1.2  1.4]
 [ 2.2  2.7  3.2]
 [ 3.4  4.2  5. ]
 [10.  12.  14. ]]

Мой код работает хорошо для этой маленькой матрицы, но когда я использовал его для матрица, которую я должен сделать, (этой формы: веса (55097, 15677), вложения (300, 55132)), код очень, очень медленный. Я пытаюсь сделать это с помощью функции np.average, но я не понимаю, что код работает. Мне нужно любое решение. Заранее всем большое спасибо.

1 Ответ

1 голос
/ 28 февраля 2020

Вы можете использовать умножение матриц

import numpy as np
print(np.matmul(matrix_de_embeddings,matrix_de_pesos)/matrix_de_embeddings.shape[1])

Numpy Умножение матриц

...