You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ArrayFire数组的重复索引位置多次修改元素?

解决ArrayFire重复索引累加修改的问题

这个问题确实是ArrayFire中索引赋值的常见行为——当你用重复索引执行+=这类操作时,它只会对每个唯一索引应用一次修改,而不会累加重复的操作。不过我们可以通过统计索引出现的频次来实现你想要的累加效果,下面是具体的实现思路和代码:

核心思路

你希望每个索引被访问几次,就对该位置执行几次加法,所以我们可以先统计每个索引在索引数组中出现的次数,然后直接将这个频次数组加到原数组上,这样每个位置的增量就是它被索引的次数。

实现代码

#include <arrayfire.h>
#include <iostream>

using namespace af;

int main() {
    float a[] = { 0.1, 0.2, 0.3, 0.4, 0.5, 0.6 };
    array A(6, a, afHost);
    af_print(A);

    float i[] = { 0, 1, 2, 2};
    array I(4, i, afHost);

    // 步骤1:统计每个索引的出现次数
    // 生成覆盖原数组所有索引的bins(这里是0到5)
    array bins = seq(0, A.elements() - 1);
    // 计算每个索引的出现频次
    array counts = histogram(I, bins);

    // 步骤2:将频次转换为和原数组匹配的类型,然后累加
    A += counts.as(f32);

    af_print(A);
    return 0;
}

代码解释

  • histogram(I, bins):这个函数会统计索引数组I中每个值在bins范围内的出现次数,返回的counts数组长度和原数组A一致,每个元素对应该索引被访问的次数(比如这里counts的结果是[1,1,2,0,0,0])。
  • counts.as(f32):因为histogram默认返回整数类型的数组,我们需要将其转换为和A一致的float类型,才能顺利执行加法操作。

运行这段代码后,你会得到预期的结果:A的第三个元素(索引2)会被累加2次,最终值为2.3。

内容的提问来源于stack exchange,提问作者Imma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:20:40