Rust で ArrayD を Array2 に変換する
Nilesh Katuwal
2023年10月8日
この記事は、Rust で ArrayD
を Array2
に変換することについてです。
さびた配列
配列は、同じ型の値のコレクションです。 同じデータ型の重要度のグループは、配列と呼ばれます。
Rustプログラミングでは、配列は要素の固定サイズコレクションで、[T; N]
で表され、ここで T
は要素の型を示し、N
は配列のコンパイル時定数サイズを示します。
配列は、2つの異なる方法で作成できます。
[x,y,z]
要素の単純なリスト。- 表現
[N, X]
の繰り返し。 これにより、X
のN
インスタンスを含む配列が作成されます。
Rustでの配列の初期化と宣言
Rust で配列を作成するための構文は複数あります。 それらのいくつかは次のとおりです。
構文:
Syntax 1:
let var_name = [val_1,val_2,val_3];
Example:
let _cars = ["BMW","Toyota","Ferrari"];
Syntax 2:
let var_name:[dataType;size_of_array] = [val_1,val_2,val_3];
Example:
let _numbers:[i32;3] = [1,2,3];
Syntax 3:
let var_name:[dataType;size_of_array] = [default_value,size_of_array];
Example:
let _num_array:[i32;3] = [0;3];
- 最初の構文では、
cars
が変数名で、BMW
、Toyota
、およびFerrari
が配列の値です。 - 2 番目の構文で、
numbers
は変数名、i32
はデータ型、3
は配列サイズ、1
、2
、3
は配列の値です。 - 3 番目の構文で、
num_array
は変数名、i32
はデータ型、3
は配列サイズ、0
は要素のデフォルト値、3
は配列のサイズです。
Rust の ND 配列
N 次元配列データ構造は、科学計算および処理で頻繁に利用されます。
ndarray
クレートは、Rust で N 次元
配列サポートを実装します。 他のクレートはそれを広範囲に使用します。
Rustの配列2
配列 2 は 2 次元配列です。 arr2
マクロを使用して簡単に作成できます。
3x3
2D 配列を作成する例を以下に示します。
extern crate ndarray;
use ndarray::arr2;
fn main() {
let mut two_dimensional_array = array2(&[[4, 5, 6],
[10, 11, 12],
[20, 21, 22]]);
array2[[2, 1]] = 10;
println!("The two dimensional array is {:?}", array2);
}
出力:
The two dimensional array is [[4, 5, 6],
[10, 11, 12],
[20, 21, 22]], shape=[3, 3], strides=[3, 1], layout=Cc (0x5), const ndim=2
Rust での ArrayD
から Array2
への変換
配列を別の配列に変換することは同じ型で可能ですが、次元は異なる必要があります。 配列の次元が一致しない場合、エラーが発生します。
したがって、軸の数は変換中に一致する必要があります。
n 次元配列を 2 次元配列に変換するには:
変数の型が ArrayD<f32>
の場合、次のコードに従うことができます。
let arr2d: Array2<f32> = arr2d.into_dimensionality::<Ix2>()?;
上記のコードは、それを Array2<f32>
型の変数に変換するものです。
use ndarray::{ArrayD, Ix2, IxDyn};
let array = ArrayD::<f32>::zeros(IxDyn(&[5, 5]));
assert!(array.into_dimensionality::<Ix2>().is_ok());
上記は、動的次元配列を作成し、それを I * 2
次元に変換するコードです。