具有多个2D流图,即 vector 场,人们将如何找到这些对之间的统计相关性?

问题:

一个不应该(?)调整2个形状为(x,y,2)的流程图的大小:将flow1, flow2转换为1D vector 并运行
np.correlation_coeff(flow1.reshape(1,-1),flow2.reshape(1,-1))
由于x,y条目已连接。

绘制收益,仅用于可视化目的:

flow1:
numpy - 关联2D向量场-LMLPHP
flow2:
numpy - 关联2D向量场-LMLPHP

我正在考虑比较幅度和方向

  • 理想情况下,如何比较这些值(cosinus距离,...)?
  • 如何比较 vector 场之间的协方差?

  • 编辑:

    我知道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))
    

    由于我将flow2包括在flow1中,因此流具有一些正相关。具体来说,它是1/sqrt(2)附近的数字,容易受到随机噪声的影响。

    如果这不是您想要的,那么您就不需要相关系数,而需要其他一些相似性度量。

    08-25 06:36