gpt4 book ai didi

arrays - 如何使用 ndarray 从向量的向量创建二维数组?

转载 作者:行者123 更新时间:2023-12-05 03:43:06 28 4
gpt4 key购买 nike

我正在尝试使用 ndarray crate 做一些生物信息学,但我似乎无法动态创建矩阵。

我有一些 bool 值向量,我想将它们组合成一个二维数组。但是,尝试展平矢量并使用 into_shape 不会保留元素的正确顺序。

因此我尝试创建一个空数组并将行连接到其中,但这给了我一个我无法理解的错误。我知道空数组没有相同的维度,但我找不到将空数组转换为正确类型和维度的方法。

use ndarray::{concatenate, Array, Axis, Ix2};

fn main() {
#[rustfmt::skip]
let vector_of_vectors = vec![
vec![true, false, true],
vec![false, true, false],
];

let mut matrix: Array<bool, Ix2> = ndarray::array![];
for array in vector_of_vectors.iter() {
matrix = concatenate![Axis(0), matrix, Array::from(array.clone())];
}
}
error[E0308]: mismatched types
--> src/main.rs:12:18
|
12 | matrix = concatenate![Axis(0), matrix, Array::from(array.clone())];
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected an array with a fixed size of 2 elements, found one with 1 element
|
= note: expected struct `ArrayBase<ViewRepr<&bool>, Dim<[usize; 2]>>`
found struct `ArrayBase<ViewRepr<&bool>, Dim<[usize; 1]>>`
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

最佳答案

请参阅ndarray 的文档:

已知行列长度

use ndarray::{Array2, Axis};

fn main() {
#[rustfmt::skip]
let rand_vec = vec![
vec![true, false, true],
vec![false, true, false],
];

let mut arr = Array2::<bool>::default((2, 3));
for (i, mut row) in arr.axis_iter_mut(Axis(0)).enumerate() {
for (j, col) in row.iter_mut().enumerate() {
*col = rand_vec[i][j];
}
}
}

Playground

未知的行和列长度

文档建议使用 extend_from_slice 有效地展平 Vec并将扁平化结果传递给 Array2::from_shape_vec :

use ndarray::Array2;

fn main() {
// A Vec<Vec<bool>> with a random length of rows and columns
let rand_vec = gen_rand_vec();

let mut data = Vec::new();

let ncols = rand_vec.first().map_or(0, |row| row.len());
let mut nrows = 0;

for i in 0..rand_vec.len() {
data.extend_from_slice(&rand_vec[i]);
nrows += 1;
}

let arr = Array2::from_shape_vec((nrows, ncols), data).unwrap();
}

Playground

给定 rand_vec 的前一个输入,两个例子都会给你:

[
[true, false, true],
[false, true, false],
]

关于arrays - 如何使用 ndarray 从向量的向量创建二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66925648/

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