gpt4 book ai didi

rust - 使用Arrayfire设置索引值

转载 作者:行者123 更新时间:2023-12-03 11:39:22 32 4
gpt4 key购买 nike

我正在尝试使用自定义值修改现有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/

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