我有一个数据集,其中包含10个接口的度量(表示为A,B,.,J).每个接口有3个传感器,因此对于接口A,我们将这些传感器表示为A1、A2、A3。
我的目标是测量不同接口的测量结果之间的差异。我认为最好使用Frobenius Norm,也就是说,对于2个矩阵A,B,范数定义为:

这意味着我最终想要一个10x10对称矩阵与矩阵的距离(对角线是零的,当然)。
我的数据集是一个CSV文件,包含25K行和30列(10个接口*3个传感器)。使用python (使用numpy和pandas)执行此计算的最佳方法是什么?我知道如何对列这样做(例如使用sklearn.metrics.pairwise.euclidean_distances ),但我没有找到一种优雅的方法来对矩阵进行增强。
编辑
一个关于我的数据集是什么样子的小例子(而不是行号,而是时间戳,而不是太重要.):
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发布于 2019-02-08 15:03:15
矩阵的Frobenius范数与传统的2--对应的平坦向量上的范数相同--所以似乎您可以将每个N*3矩阵都压平成一个3N*1向量,从而生成一个3N*10数组,其中N是您的行数?此时,您可以调用成对的距离函数,就像您提到的处理列的函数一样。
在N=200中如何在一行中执行此转换的示例
In [2]: x = np.empty((200,30))
In [3]: y = x.T.reshape(10,-1).T
In [4]: y.shape
Out[4]: (600, 10)发布于 2019-02-08 15:08:31
您可能想看看scipy.spatial.distance.pdist (文档)
示例:
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. ]])https://stackoverflow.com/questions/54594283
复制相似问题