rust - 使用Arrayfire设置索引值

标签 rust seq arrayfire

我正在尝试使用自定义值修改现有Arrayfire矩阵中的值。以下是将几行和几列更改为指定值(1.0)的示例,但是我却在努力不做两件事:

  • 改为更改要更改区域的尺寸(3x3)->(2x2)。
  • 水平或垂直移动要更改的区域。我所做的任何更改似乎都给出了无效的索引错误。
  • use arrayfire::{constant, Dim4, Seq, assign_seq, print};
    let a    = constant(2.0 as f32, Dim4::new(&[5, 3, 1, 1]));
    let b    = constant(1.0 as f32, Dim4::new(&[3, 3, 1, 1]));
    let seqs = &[Seq::new(1.0, 3.0, 1.0), Seq::default()];
    
    print(&a);
    // 2.0 2.0 2.0
    // 2.0 2.0 2.0
    // 2.0 2.0 2.0
    // 2.0 2.0 2.0
    // 2.0 2.0 2.0
    
    let sub  = assign_seq(&a, seqs, &b);
    
    
    print(&sub);
    // 2.0 2.0 2.0
    // 1.0 1.0 1.0
    // 1.0 1.0 1.0
    // 1.0 1.0 1.0
    // 2.0 2.0 2.0
    

    最佳答案

    经过数天的研究,在与图书馆作者联系后,我找到了答案:

    use arrayfire::{constant, Dim4, Seq, assign_seq, print};
    
    //This is the "parent" matrix.
    let a    = constant(2.0 as f32, Dim4::new(&[4, 4, 1, 1]));
    
    //To modify a 2x2 area inside a, this must be 2x2 as well
    let b    = constant(1.0 as f32, Dim4::new(&[2, 2, 1, 1]));
    
    //Use two seq::new objects, NOTE that matrices are column major.
    let seqs = &[Seq::new(1.0, 1.0, 1.0), Seq::new(1.0, 1.0, 1.0)];
    
    Arrayfire 3.7.1还引入了一种新的优雅语法:
    let mut a = arrayfire::constant(2.0 as f32, arrayfire::dim4!(4, 4));
    let b = arrayfire::constant(1.0 as f32, arrayfire::dim4!(2,2));
    
    arrayfire::print(&a);
    arrayfire::eval!(a[1:1:1, 1:1:1] = b);
    arrayfire::print(&a);
    

    关于rust - 使用Arrayfire设置索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63680420/

    相关文章:

    performance - 尾递归和 Seq 库之间的 F# 性能差异

    python - 使用 ArrayFire 的多个主机线程

    c++ - 使用重复索引更改索引数组中的 ArrayFire 数组

    error-handling - 当函数没有返回成功值时如何使用 Result?

    multithreading - Rust 中的后台工作线程和同步

    struct - 使用 envy 时如何用匹配结果填充结构体实例?

    r - r 中的 seq() 函数出错?

    regex - 在 Rust 中保存/加载编译的正则表达式?

    F#:向下转换 seq 到 IEnumerator

    c++ - 从简单的 arrayfire 构造函数中获取段错误