首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩阵距离矩阵

矩阵距离矩阵
EN

Stack Overflow用户
提问于 2019-02-08 14:14:44
回答 2查看 695关注 0票数 1

我有一个数据集,其中包含10个接口的度量(表示为A,B,.,J).每个接口有3个传感器,因此对于接口A,我们将这些传感器表示为A1、A2、A3。

我的目标是测量不同接口的测量结果之间的差异。我认为最好使用Frobenius Norm,也就是说,对于2个矩阵A,B,范数定义为:

这意味着我最终想要一个10x10对称矩阵与矩阵的距离(对角线是零的,当然)。

我的数据集是一个CSV文件,包含25K行和30列(10个接口*3个传感器)。使用python (使用numpypandas)执行此计算的最佳方法是什么?我知道如何对列这样做(例如使用sklearn.metrics.pairwise.euclidean_distances ),但我没有找到一种优雅的方法来对矩阵进行增强。

编辑

一个关于我的数据集是什么样子的小例子(而不是行号,而是时间戳,而不是太重要.):

代码语言:javascript
复制
     A1    A2    A3    ...    J1   J2   J3
1   3.2   12.9  -7.8  ...    5.5  11.2  -6.9
2   3.4   12.7  -8.0  ...    5.6  11.3  -7.9
3   3.2   12.9  -7.8  ...    5.6  11.4  -7.6
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-08 15:03:15

矩阵的Frobenius范数与传统的2--对应的平坦向量上的范数相同--所以似乎您可以将每个N*3矩阵都压平成一个3N*1向量,从而生成一个3N*10数组,其中N是您的行数?此时,您可以调用成对的距离函数,就像您提到的处理列的函数一样。

N=200中如何在一行中执行此转换的示例

代码语言:javascript
复制
In [2]: x = np.empty((200,30))

In [3]: y = x.T.reshape(10,-1).T

In [4]: y.shape
Out[4]: (600, 10)
票数 1
EN

Stack Overflow用户

发布于 2019-02-08 15:08:31

您可能想看看scipy.spatial.distance.pdist (文档)

示例:

代码语言:javascript
复制
df
>>     A1    A2   A3   J1    J2   J3  B1  B2  B3
1  3.2  12.9 -7.8  5.5  11.2 -6.9   3   1   2
2  3.4  12.7 -8.0  5.6  11.3 -7.9   3   1   2
3  3.2  12.9 -7.8  5.6  11.4 -7.6   3   1   2

from scipy.spatial import distance
groups = [['A1', 'A2', 'A3'], ['B1', 'B2', 'B3'], ['J1', 'J2', 'J3']]

# based on your formula, simply flatten the data to take element-wise distance
dist = distances(distance.pdist([df[group].values.flatten() for group in groups]))
dist
>> array([26.69138438,  4.88364618, 24.6462979 ])

# if you want matrix form
distance.squareform(dist)
>>array([[ 0.        , 26.69138438,  4.88364618],
   [26.69138438,  0.        , 24.6462979 ],
   [ 4.88364618, 24.6462979 ,  0.        ]])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54594283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档