Java 如何计算ND4J中两个IND阵列向量之间的欧氏距离?

Java 如何计算ND4J中两个IND阵列向量之间的欧氏距离?,java,deeplearning4j,nd4j,Java,Deeplearning4j,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

我试图计算两个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可以做到这一点。但是我不知道怎么做


注意:不需要为循环使用
计算欧几里德函数。事实上,我试图看到矢量化对欧几里德距离计算的性能影响。我知道Nd4J和Numpy一样支持SIMD和矢量化。对于变换。相同形状张量之间距离的欧几里德距离(a,b)。或类似于“沿维度案例”的内容


编辑:添加了AlleucLideAndInstance的代码示例。

Transforms.AlleucLideAndInstances(a、b、axis)。我在答案中添加了AlleucLideAndInstance()的示例,它将为您提供与python脚本类似的值,但顺序不同。这与python脚本完全一样。在python示例中,arr2在arr1之前给出:
Transforms.alleuclidestances(arr2,arr1,1)我们能以有效的方式完成吗?因为这种方法需要更多的时间,所以要感谢使用正则for循环(这是不直观的)。ND4J应该使用“矢量化C++代码来进行所有的数值运算”,这样做会更好吗?我不知道如何实现这一点
@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);
}