将函数应用于numpy矩阵中的每个元素

时间:2017-02-22 21:26:48

标签: python numpy

我有一个函数可以计算两个元素之间调整后的余弦相似度,类似于:

def sim(x,y,M):
    filtered = M[(M[:, x] > 0) & (M[:, y] > 0)]
    m = np.average(filtered, axis=1, weights=filtered.astype(bool))
    i = filtered[:, x] - m
    j = filtered[:, y] - m
    return np.sum(i * j) / (np.linalg.norm(i) * np.linalg.norm(j))

我还有一个n * n矩阵,我想为每一对得到sim(),即0,0-n,n。 目前我正在使用两个for循环来做这个,它运行良好,但它很慢:

def get_matrix(M):
    new_mat = []
    for x in range(3):
        for y in range(3):
            new_mat.append(sim(x,y,M))
    return np.reshape(new_mat, (3,3))

有更有效的方法吗? M( mn )和mat( nn )的尺寸不同。

编辑:

My M看起来像这样:

[[   0.  100.  300.]
 [ 100.  200.    0.]
 [ 250.  150.    0.]
 [ 250.  200.    0.]]

作为输出,我希望在这种情况下需要一个大小为3x3的矩阵(new_mat),它包含每个项目之间的相似性,简化:

[[  1.  -1.  -1.]
 [ -1.   1.  -1.]
 [ -1.  -1.   1.]]

0 个答案:

没有答案