Как я могу ввести данные из Array2 в kdtree? - PullRequest
1 голос
/ 21 февраля 2020

У меня есть облако точек в массиве ndarray2 размером 3х500. Я хотел бы сделать дерево KD из этих точек, используя ящик KdTree. 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.

Чтобы добавить очки, которые я пытался использовать:
pub fn add(&mut self, point: U, data: T) -> Result<(), ErrorKind> 

Но я не знаю, какими должны быть данные.

1 Ответ

0 голосов
/ 21 февраля 2020

Это потому, что вы пытаетесь запустить только это:

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 выводит переменные типа во время компиляции.

Компилятор обычно может определить, какой тип мы хотим использовать, основываясь на значении и способах его использования

Во втором фрагменте кода Rust смог выяснить тип, который мы хотим kdtree иметь, взглянув на наш метод add, но это не произошло в первом случае, потому что не было предоставлено никакой дополнительной информации.

Третий фрагмент кода работает, потому что мы явно набираем тип kdtree.

Но я не знаю, какие данные должны быть

Здесь data : T - generi c и может быть чем угодно.

...