numpy - 相关 2D 矢量场
问题描述
拥有多个 2D 流图,即向量场,如何找到这些对之间的统计相关性?
问题:_
不应该(?)将 2 个形状为 (x,y,2): 的流图调整flow1, flow2
为 1D 向量并运行
np.correlation_coeff(flow1.reshape(1,-1),flow2.reshape(1,-1))
因为 x,y 条目是连接的。
绘制产量,仅用于可视化目的:
我正在考虑比较大小和方向。
理想情况下如何比较这些(余弦距离,...)?
如何比较向量场之间的协方差?
编辑:
我知道这np.corrcoef(flow1.reshape(2,-1), flow2.reshape(2,-1))
将返回一个 4,4 相关系数矩阵,但发现它解释起来不直观。
解决方案
对于某些相似性度量,可能确实需要考虑域的空间结构。但是相关系数并不能做到这一点:它在域的任何排列下都是不变的。例如,(0, 1, 2, 3, 4) 和 (1, 2, 4, 8, 16) 之间的相关性与 (1, 4, 2, 0, 3) 和 (2, 16) 之间的相关性相同, 4, 1, 8) 其中两个数组都以相同的方式重新洗牌。
因此,相关系数将通过以下方式获得:
- 将两个数组居中,即减去它们的平均值。比如说,我们得到 FC1 和 FC2。
- 取内积 FC1 和 FC2 :这只是匹配项的乘积之和。
- 除以内积 FC1*FC1 和 FC2*FC2 的平方根。
例子:
flow1 = np.random.uniform(size=(10, 10, 2)) # the 3rd dimension is for the components
flow2 = flow1 + np.random.uniform(size=(10, 10, 2))
flow1_centered = flow1 - np.mean(flow1, axis=(0, 1))
flow2_centered = flow2 - np.mean(flow2, axis=(0, 1))
inner_product = np.sum(flow1_centered*flow2_centered)
r = inner_product/np.sqrt(np.sum(flow1_centered**2) * np.sum(flow2_centered**2))
这里的流量有一些正相关,因为我在 flow1 中包含了 flow2。具体来说,它是一个 周围的数字1/sqrt(2)
,受随机噪声影响。
如果这不是您想要的,那么您不需要相关系数,而是需要其他一些相似性度量。
推荐阅读
- reactjs - React-native-maps 未在 iOS 上显示谷歌地图样式
- c++ - 如何编写用于在 C++14 中调用 Fortran 函数的通用包装器(按引用调用 --> 按值调用)
- coq - 战术:filter_exercise
- python - 通过循环 df 内的簇来显示堆叠直方图
- python - 如何使用 Python 从受保护的画布元素中获取图像?
- angular - Angular Universal:添加服务工作者不允许页面的特定标题
- linux - 如何实现类似于“truncateat”的东西?
- vb.net - 索引值列表 VB.Net
- android - 协程 - 单元测试 viewModelScope.launch 方法
- sql-server - 如果在最后一分钟内插入了行,则执行存储过程