【问题标题】:Correlation 2D vector fields相关 2D 矢量场
【发布时间】:2019-04-13 05:47:50
【问题描述】:

拥有多个 2D 流图,即矢量场,如何找到这些对之间的统计相关性?

问题

不应该(?)将 2 个形状为 (x,y,2) 的流图:flow1, flow2 调整为 1D 向量并运行

np.correlation_coeff(flow1.reshape(1,-1),flow2.reshape(1,-1))

因为 x,y 条目是连接的。

绘制产量,仅用于可视化目的:

流程1: 流程2:

我正在考虑比较大小和方向

  • 理想情况下如何比较这些(余弦距离,...)?

  • 如何比较向量场之间的协方差?

编辑:

我知道np.corrcoef(flow1.reshape(2,-1), flow2.reshape(2,-1)) 会返回一个 4,4 相关系数矩阵,但发现它解释起来不直观。

【问题讨论】:

    标签: numpy scikit-learn scipy correlation covariance


    【解决方案1】:

    对于某些相似性度量,可能确实需要考虑域的空间结构。但是相关系数并没有做到这一点:它在域的任何排列下都是不变的。例如,(0, 1, 2, 3, 4) 和 (1, 2, 4, 8, 16) 之间的相关性与 (1, 4, 2, 0, 3) 和 (2, 16) 之间的相关性相同, 4, 1, 8) 其中两个数组都以相同的方式重新洗牌。

    因此,相关系数将通过以下方式获得:

    1. 将两个数组居中,即减去它们的平均值。比如说,我们得到 FC1 和 FC2。
    2. 取内积 FC1 和 FC2 :这只是匹配项的乘积之和。
    3. 除以内积 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) 的数字,受随机噪声影响。

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

    【讨论】:

    • 非常感谢!对我来说,这看起来像余弦相似度?这是否考虑了向量的大小,因为向量已归一化并居中?什么是同时使用角度和幅度的好度量,或者如何衡量幅度相似性(概率协方差?)
    • 字段 F 和 100*F 具有完全相关性 (1)。如果不希望这样做,则需要另一种措施。也许是向量 F - G 的平方范数之和。可以写出无数个公式。
    • 有趣,你有没有更多的信息(也许是维基?)
    • 向量 F - G 的平方范数之和,基本上是方差但不是均值居中?
    猜你喜欢
    • 2019-11-18
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2022-01-22
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多