一维地球移动器在BigQuery / SQL中的距离

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一维地球移动器在BigQuery / SQL中的距离相关的知识,希望对你有一定的参考价值。

设P和Q为整数上的两个有限概率分布,支持0和一些大整数N.P和Q之间的一维earth mover's distance是将P转换为Q必须支付的最小成本,考虑到它的成本为r * |纳米|将与整数n相关联的概率r“移动”到另一个整数m。

有一个简单的algorithm来计算这个。在伪代码中:

previous = 0
sum = 0
for i from 0 to N:
    previous = P(i) - Q(i) + previous
    sum = sum + abs(previous)         // abs = absolute value
return sum

现在,假设您有两个包含概率分布的表。列n包含整数,列p包含相应的概率。表是正确的(所有概率都在0和1之间,它们的总和是我想在BigQuery(标准SQL)中计算地球移动器在这两个表之间的距离。

  1. 可能吗?我觉得有人需要使用分析功能,但我对它们没有多少经验,所以我不知道如何到达那里。
  2. 如果N(最大整数)非常大,但我的表不是?我们可以调整解决方案以避免对每个整数进行计算吗?
答案

希望我完全理解你的问题。这似乎是你正在寻找的:

WITH Aggr AS (
  SELECT rp.n AS n, SUM(rp.p - rq.p)
  OVER(ORDER BY rp.n ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS emd
  FROM P rp
  LEFT JOIN Q rq
  ON rp.n = rq.n
) SELECT SUM(ABS(a.emd)) AS total_emd
FROM Aggr a;

WRT问题#2,注意我们只扫描表中的实际内容,无论N如何,假设P中的每个n与Q中的n一对一匹配。

另一答案

我调整了迈克尔的答案来解决问题,这是我最终解决的问题。假设整数存储在列i中,并且概率存储在列p中。首先我加入两个表,然后我使用窗口为所有EMD(i)计算i,然后我求和所有绝对值。

WITH
joined_table AS (
  SELECT
    IFNULL(table1.i, table2.i) AS i,
    IFNULL(table1.p, 0) AS p,
    IFNULL(table2.p, 0) AS q,
  FROM table1
  OUTER JOIN table2
  ON table1.i = table2.i
),
aggr AS (
  SELECT
    (SUM(p-q) OVER win) * (i - (LAG(i,1) OVER win)) AS emd
  FROM joined_table
  WINDOW win AS (
    ORDER BY i
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  )
)
SELECT SUM(ABS(emd)) AS total_emd
FROM aggr

以上是关于一维地球移动器在BigQuery / SQL中的距离的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 中加载 JSON / JSON 在从位置开始的行中解析错误 ...:解析器在字符串结束之前终止

如何使用 BigQuery 和 Apache Beam 将 SQL 表转换为行序列列表?

如何在文件中从SQL源创建BigQuery视图(Windows命令行)

P2620 虫洞

无法按 BigQuery/Firebase 中的内容对购买者进行排序

如何将一维数组转化为二维数组的具体规律?