Rust で ArrayD を Array2 に変換する

Nilesh Katuwal 2023年10月8日
  1. さびた配列
  2. Rustでの配列の初期化と宣言
  3. Rust の ND 配列
  4. Rustの配列2
  5. Rust での ArrayD から Array2 への変換
Rust で ArrayD を Array2 に変換する

この記事は、Rust で ArrayDArray2 に変換することについてです。

さびた配列

配列は、同じ型の値のコレクションです。 同じデータ型の重要度のグループは、配列と呼ばれます。

Rustプログラミングでは、配列は要素の固定サイズコレクションで、[T; N]で表され、ここで Tは要素の型を示し、Nは配列のコンパイル時定数サイズを示します。

配列は、2つの異なる方法で作成できます。

  1. [x,y,z] 要素の単純なリスト。
  2. 表現 [N, X] の繰り返し。 これにより、XN インスタンスを含む配列が作成されます。

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];
  1. 最初の構文では、cars が変数名で、BMWToyota、および Ferrari が配列の値です。
  2. 2 番目の構文で、numbers は変数名、i32 はデータ型、3 は配列サイズ、123 は配列の値です。
  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 次元に変換するコードです。

関連記事 - Rust Array