Расчет метрики васзерштейна по матрицам и растрам
Я пытался вычислить метрику васзерштейна, используя функцию из пакета. У меня есть два слоя высот в виде файлов .tif, и я их растеризовал. Затем я конвертирую их в матрицы, чтобы их можно было использовать в
pgrd
функция, которая затем преобразует матрицы в формат, который можно использовать в функции. Когда я пытаюсь использовать матрицы в
wasserstein
функция, я получаю эту ошибку. Кто-нибудь знаком с
transport
пакет, который может пролить свет на эту ошибку? Есть ли у вас какие-либо предложения по другим методам расчета этой метрики из растровых файлов?
Error in gen_cost(x, x, threads) : std::bad_alloc
In addition: Warning message:
In transport.pgrid(a, b, p = p, ...) :
total mass in a and b differs. Normalizing a and b to probability measures (totcontmass=1).
Вот код, который я использовал:
library(raster)
library(transport)
download.file("https://prd-tnm.s3.amazonaws.com/StagedProducts/Elevation/13/TIFF/n37w115/USGS_13_n37w115.tif",
"my_elev.tif",
mode = "wb")
download.file("https://prd-tnm.s3.amazonaws.com/StagedProducts/Elevation/13/TIFF/n42w109/USGS_13_n42w109.tif",
"my_elev2.tif",
mode = "wb")
dem <- raster("my_elev.tif")
dem2 <- raster("my_elev2.tif")
plot(dem)
mtrx <- as.matrix(dem)
pgrd <- pgrid(mtrx)
mtrx2 <- as.matrix(dem2)
pgrd2 <- pgrid(mtrx2)
wasserstein(pgrd, pgrd2, p = 1)