Python 将函数映射到Scipy/numpy矩阵的所有列

Python 将函数映射到Scipy/numpy矩阵的所有列,python,numpy,scipy,Python,Numpy,Scipy,我有一个40*4的矩阵M和一个包含40个元素的向量a。我想计算A和每个列向量之间的余弦距离,单位为M 我真的需要这样写吗 print [cosine(M[:,i],A) for i in range(A.shape[1])] 还是有其他更好的方法 可以在此处查看余弦文档: 谢谢 根据,Numpy似乎有一种python方式来迭代矩阵的列。这样,你可以写: print [cosine(column,A) for column in M.transpose()] 它似乎只对向量有效。要使用矢量化

我有一个40*4的矩阵
M
和一个包含40个元素的向量
a
。我想计算
A
和每个列向量之间的余弦距离,单位为M

我真的需要这样写吗

 print [cosine(M[:,i],A) for i in range(A.shape[1])]
还是有其他更好的方法

可以在此处查看余弦文档:


谢谢

根据,Numpy似乎有一种python方式来迭代矩阵的列。这样,你可以写:

print [cosine(column,A) for column in M.transpose()]

它似乎只对向量有效。要使用矢量化表达式高效计算余弦距离,请执行以下操作

normM = np.sqrt((M ** 2).sum(axis=0))
normA = np.sqrt((A ** 2).sum())
cossim = np.dot(M.T, A) / (normM * normA)
dist = 1. - cossim

假设
M.shape==(40,4)
A.shape==(4,)
,并且两者都不是
np.matrix
,也许更实用的方法是将
余弦的第二个参数绑定到
A
,然后使用
map
将此绑定函数应用到
M
的列

map(partial(cosine,v=A), M.transpose())

你能显示M.shape和A.shape输出吗。对于(40,4)、(40,1),您的代码提供1x1列表,而不是4x1列表。对于其他变体-对齐错误。更好意味着更快、更漂亮或其他什么?如果效率很重要,这个解决方案比其他解决方案快5倍