# enable parallel computation
if (requireNamespace("future")) {
future::plan(future::multisession)
}
# generate random signed measures with total mass 0 (row-wise)
rsum0 <- \(K, N) {
x <- runif(K * N) |> matrix(K, N)
x <- sweep(x, 1, rowSums(x) / N, "-")
x[, 1] <- x[, 1] - rowSums(x)
x
}
K1 <- 3
K2 <- 2
N <- 4
costm <- cost_matrix_lp(1:N)
set.seed(123)
mu <- rsum0(K1, N)
nu <- rsum0(K2, N)
print(ot_cost_sgn(mu[2, ], nu[2, ], costm))
# mode = "diag" requires K1 = K2
print(ot_cost_sgn(mu[1:2, ], nu, costm, mode = "diag"))
print(ot_cost_sgn(mu, nu, costm))
# only works properly if costm is semi-metric
print(ot_cost_sgn(mu, NULL, costm))
# but it requires less computations than
print(ot_cost_sgn(mu, mu, costm))
# \dontshow{
## R CMD check: make sure any open connections are closed afterward
if (requireNamespace("future") && !inherits(future::plan(), "sequential")) future::plan(future::sequential)
# }
Run the code above in your browser using DataLab