我有一个3D numpy阵列A的形状(m,n,300(和一个2D numpy阵列B(p,300(。
对于3D数组中的M(N,300(矩阵中的每个矩阵,我想计算其余弦相似性矩阵与2D Numpy阵列。目前,我正在做以下操作:
result = []
for sub_matrix in A:
result.append(sklearn.metrics.pairwise.cosine_similarity(sub_matrix, B)
sklearn cosine_simurarity函数不支持3D数组的操作,因此是否有更有效的方法来计算此方法,而不涉及使用for-loop?
您可以重塑到2D
并使用相同的功能 -
from sklearn.metrics.pairwise import cosine_similarity
m,n = A.shape[:2]
out = cosine_similarity(A.reshape(m*n,-1), B).reshape(m,n,-1)
最终重塑后,输出将是3D
,这是您在result
的数组转换后将获得的。
样本运行 -
In [336]: np.random.seed(0)
...: A = np.random.rand(5,4,3)
...: B = np.random.rand(2,3)
...:
...: result = []
...: for sub_matrix in A:
...: result.append(cosine_similarity(sub_matrix, B))
...: out_org = np.array(result)
...:
...: from sklearn.metrics.pairwise import cosine_similarity
...:
...: m,n = A.shape[:2]
...: out = cosine_similarity(A.reshape(m*n,-1), B).reshape(m,n,-1)
...:
...: print np.allclose(out_org, out)
True