如何在 Python 中找到两个矩阵之间的差异,结果不应该有任何带负号的值

新手上路,请多包涵

我有一个包含两列(Word 和 Word_Position)的 Panda Dataframe。我需要找到单词之间的距离并以矩阵形式呈现输出以提高可读性。

到目前为止,我所做的是从 DF.Word_Position 列创建了一个行矩阵,并将其转置以创建一个列矩阵。当我减去这两个矩阵时,我得到的值很少,前面有负号。

出于对伟大数学的尊重,这是绝对正确的,但根据我的要求,我只需要数字而不是减号。

还有其他更好的方法吗?感谢您的帮助。提前致谢。

注意:我使用的是 Python 3.6

代码片段及其相应的输出供您参考

m1 = np.matrix(df1['Word Position'])
print(m1)
[[ 1  2  3 ..., 19 20 21]]

m2 = np.matrix(m1.T)
print(m2)
[[ 1]
 [ 2]
 [ 3]
 ...,
 [19]
 [20]
 [21]]

print(m2-m1)
[[  0  -1  -2 ..., -18 -19 -20]
 [  1   0  -1 ..., -17 -18 -19]
 [  2   1   0 ..., -16 -17 -18]
 ...,
 [ 18  17  16 ...,   0  -1  -2]
 [ 19  18  17 ...,   1   0  -1]
 [ 20  19  18 ...,   2   1   0]]

原文由 JKC 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

只取绝对值?

 np.abs(m2 - m1)

您的代码表明您的数据由 numpy 数组组成,因此上面的解决方案应该有效。

如果它们是数据框,你可以这样做:

 m2.sub(m1).abs()

原文由 Alexander 发布,翻译遵循 CC BY-SA 3.0 许可协议

在这种情况下,您可能想使用 scipy.spatial.distance.pdist

 from scipy.spatial.distance import squareform, pdist
m = df1['Word Position'].data[:, None]
dist = squareform(pdist(m, 'minkowksi', 1))

这有点矫枉过正,但如果您想更改距离参数,则可以扩展,并且通常比广播更快(因为它只执行减法步骤的一半,如 abs(a-b) == abs(b-a) )。如果你想做广播,你总是可以这样做:

 dist = np.abs(m - m.T)

原文由 Daniel F 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题