如何将 Array2<f64> 中的数据输入到 kdtree 中?

How can I input the data from an Array2<f64> into a kdtree?

我在 3x500 的 ndarray Array2 中有一个点云。 我想使用 KdTree 板条箱从这些点制作一棵 kd 树。 https://docs.rs/kdtree/0.6.0/kdtree/

  1. 以下示例在 KdTree 文档中:
let dimensions = 2;
let mut kdtree = KdTree::new(dimensions);

但是当我尝试这样做时,我得到:

cannot infer type for type parameter `A`
consider giving `tree` the explicit type `kdtree::kdtree::KdTree<A, T, U>`, where the type parameter `A` is specified

而且我不知道 A、T 和 U 应该是什么。

  1. 添加我尝试使用的点:
pub fn add(&mut self, point: U, data: T) -> Result<(), ErrorKind> 

但我不知道数据应该是什么。

这是因为您只是想 运行 这个 :

let dimensions = 2;
let mut kdtree = KdTree::new(dimensions); // kdtree type is KdTree<?, ?, ?>

而不是:

let a: ([f64; 2], usize) = ([0f64, 0f64], 0);
let b: ([f64; 2], usize) = ([1f64, 1f64], 1);
let c: ([f64; 2], usize) = ([2f64, 2f64], 2);
let d: ([f64; 2], usize) = ([3f64, 3f64], 3);

let dimensions = 2;
let mut kdtree = KdTree::new(dimensions); // kdTree type is KdTree<f64, usize, &[f64; 2]>

kdtree.add(&a.0, a.1).unwrap();
kdtree.add(&b.0, b.1).unwrap();
kdtree.add(&c.0, c.1).unwrap();
kdtree.add(&d.0, d.1).unwrap();

您可以将顶部代码更改为:

let dimensions = 2;
// we provide the type ourselves
let mut kdtree: KdTree<f64, usize, &[f64; 2]> = KdTree::new(dimensions);

现在这发生了 Rust 在编译期间如何推断 type of variables

The compiler can usually infer what type we want to use based on the value and how we use it

在第二段代码中,Rust 能够通过查看我们的 add 方法找出我们希望 kdtree 拥有的类型,但这在第一种情况下并没有发生,因为没有额外的已提供信息。

第三段代码有效,因为我们明确输入了 kdtree 的类型。

But I don't know what data is supposed to be

这里 data : T 是一个 generic 可以是任何东西。