将rust ndarray的一个切片中的值分配给另一个ndarray的等效切片

uinbv5nw  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(101)

在Python中,假设我有两个4D NumPy数组(确切的维数并不重要,除了它是多维的):

import numpy as np

a = np.ones((4, 5, 6, 7))
b = np.zeros((4, 5, 6, 7))

如果我想将b中的某个切片分配给a,我可以这样做,例如:

a[1:3, 0:2, 1::2, :] = b[1:3, 0:2, 1::2, :]

如果我有两个4D rust ndarray,例如,

use ndarray::prelude::*

fn main() {
  let mut a = Array4::<f64>::ones((4, 5, 6, 7));
  let b = Array4::<f64>::zeros((4, 5, 6, 7));
}

我该如何把b的一个切片等价地赋值给a呢?
这是相当相似的,但(我认为)不完全相同:

this Github thread中有信息。

j5fpnvbx

j5fpnvbx1#

我发现的方法是使用slice_mut方法,assign方法和s!切片宏。为了与上面的情况完全匹配,我们可以这样做:

use ndarray::prelude::*;

fn main() {
    let mut a = Array4::<f64>::ones((4, 5, 6, 7));
    let b = Array4::<f64>::zeros((4, 5, 6, 7));

    // assign a slice of b into an equivalent slice of a
    a.slice_mut(s![1..3, 0..2, 1..;2, ..]).assign(
        &b.slice(s![1..3, 0..2, 1..;2, ..])
    );
}

相关问题