Java 如何计算ND4J中两个IND阵列向量之间的欧氏距离?
我试图计算两个INDArray之间的欧几里德距离(假设INDArray是numpy数组的替代品)。在python中,我实现了以下目标: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
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);
}