【问题标题】:I need make a weighted average using two matrix我需要使用两个矩阵进行加权平均
【发布时间】:2020-02-28 10:04:50
【问题描述】:

我不是程序员,我是生物学家,我需要用两个矩阵制作以下内容:

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. ]]

我的代码适用于这个小矩阵,但是当我将它用于我应该做的矩阵时(这种形状:weights(55097, 15677),embeddings(300, 55132)),代码非常非常慢。 我试着用函数np.average 来做这件事,但我不明白代码是否有效。 我需要任何解决方案。 非常感谢大家。

【问题讨论】:

  • 你能提供一个简单的例子@Yaiza 吗?
  • @Yaiza,您也可以考虑 numba numba.pydata.org 以及考虑并行性等。

标签: python numpy average


【解决方案1】:

你可以使用矩阵乘法

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

Numpy Matrix Multiplication

【讨论】:

  • 啊太棒了!这确实是一个考虑了两次的matmul。很好的答案...
  • @yatu 我看到了你的帖子,后来我了解了广播,所以谢谢你。
猜你喜欢
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多