gpt4 book ai didi

java - 如何计算 ND4J 中两个 INDArray 的 vector 之间的欧几里德距离?

转载 作者:行者123 更新时间:2023-12-02 08:39:49 25 4
gpt4 key购买 nike

我正在尝试计算两个 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 循环 计算欧几里德不是必需的。实际上,我试图了解矢量化对欧几里德距离计算的性能影响。我了解到 Nd4J 就像 Numpy 一样支持 SIMD 和矢量化。对于 details

最佳答案

Transforms.euclideanDistance(a,b) 用于相同形状张量之间的距离。或者类似的“沿维度情况”

@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 的代码示例。

关于java - 如何计算 ND4J 中两个 INDArray 的 vector 之间的欧几里德距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61445918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com