如何计算 ND4J 中两个 INDArrays 向量之间的欧氏距离?

how to calculate Euclidean distance between vectors of two INDArrays in ND4J?

我正在尝试计算两个 INDArray 之间的欧氏距离(假设 INDArray 是 numpy 数组的替代项)。在 python 中,我实现了这个:

import numpy as np
from scipy.spatial.distance import cdist
arr1 = np.array(of some size)
arr2 = np.array(of some size)
ans = cdist(arr2 , arr1)

示例:

arr1 = [[20.73 62.67 ]   # each row is a vector. so arr1 has 3 2-Dimensional vectors
        [93.47 13.83]
        [50.01 16.60]]

arr2 = [[20.66  6.09]    # arr2 has 2 2-Dimensional vectors
        [51.79 85.14]]

ans =  [[56.57 73.21 31.17]   # distances of vectors of arr2 with arr1
        [38.33 82.59 68.55]]

请帮助我在 java 中实现这一目标。我对 java 了解不多。到目前为止,我得出的结论是 Nd4J 可以做到这一点。但是我不知道怎么办。

注意: 不需要使用 for loops 计算欧氏。实际上,我正在尝试查看矢量化对欧氏距离计算的性能影响。我开始知道 Nd4J 像 Numpy 一样支持 SIMD 和矢量化。对于 details

Transforms.euclideanDistance(a,b) 表示相同形状张量之间的距离。或者 "along dimension case"

这样的东西
@Test
public void testEuclidean() {
    val arr1 = Nd4j.createFromArray(20.73, 62.67, 93.47, 13.83, 50.01, 16.60).reshape(3, 2);
    val arr2 = Nd4j.createFromArray(20.66, 6.09, 51.79, 85.14).reshape(2, 2);

    val result = Transforms.allEuclideanDistances(arr1, arr2, 1);
    log.info("Result: {}", result);
}

编辑:为 allEuclideanDistances 添加了代码示例。