Я пытаюсь применить Rust для задач машинного обучения. В таких задачах часто требуется выполнять преобразование между различными форматами данных (чередующиеся, планарные) и точностью (u8
, i32
, f32
).
Я придумал следующий код на данный момент:
let input_image = ndarray_image::open_image("test_data/cat.png", ndarray_image::Colors::Bgr).unwrap();
let dims = input_image.dim();
let width = dims.0;
let height = dims.1;
let channels = dims.2;
let len = width * height * channels;
let mut input_image_f32 = Array3::<f32>::zeros((channels, height, width).f());
for c in 0..channels {
for h in 0..height {
for w in 0..width {
input_image_f32[[c, h, w]] = input_image[[h, w, c]] as f32;
}
}
}
Я думаю, что должен быть лучший способ сделать то, что мне нужно, без необходимости l oop над контейнерами. Буду очень признателен, если кто-нибудь поделится идеями о том, как можно улучшить код.