如何在Arrayfire中分组Max



是否有这样的东西

af::array groupedMax= af::Max(myValues, fromIndices, toIndices);

例如,

myValues= {random values}
fromIndices = {2, 7, 5}
toIndices = {10, 9, 12}

结果应为

groupedMax[0] will be max between myValues[2] and myValues[10]
groupedMax[1] will be max between myValues[7] and myValues[9]
groupedMax[2] will be max between myValues[5] and myValues[12]

这是可以实现的吗?如果没有,任何想法如何在arrayfire上超快做这个?

编辑:这是我想实现的粗糙单线代码。

vector<double> groupedMaxValues(fromIndices.size());
for(int g=0; g<fromIndices.size(); g++)
{
  double maxVal = 0;
  for(int i=fromIndices[g]; i<=toIndices[g]; i++)
  {
    if(maxVal < myValues[i])
    {
      maxVal = myValues[i];
    }
  }
  groupedMaxValues[g] = maxVal;
}

我不知道分组的最大值是什么,但是可以使用以下

在两个AF ::数组之间的最大操作进行操作
af::array a = myValues(fromIndices);
af::array b = myValues(toIndices);
af::array cond = a > b;
af::array mxd = cond * a + (1 - cond) * b;

在上面的示例中,两个输入a&amp;b只是myValues的索引数组。

更新:( 2019年6月6日(在Bobodev对此答案的最新评论之后,这是我根据您的说明提出的代码,并提供了正确的输出(在代码之后显示(

    float v[] = {10.0f, 30.0f, 20.0f};
    af::array myValues(3, 1, v);
    int f4m[] = {10};
    int to[] = {12};
    af::array fromIndices(1, f4m);
    af::array toIndices(1, to);
    af_print(myValues);
    af_print(fromIndices);
    af_print(toIndices);
    af::array a = myValues(fromIndices);
    af::array b = myValues(toIndices);
    af::array cond = a > b;
    af::array mxd = cond * a + (1 - cond) * b;
    af_print(mxd);

样品的输出

myValues
[3 1 1 1]
   10.0000 
   30.0000 
   20.0000 
fromIndices
[1 1 1 1]
        10 
toIndices
[1 1 1 1]
        12 
mxd
[1 1 1 1]
   30.0000 

对不起,我对原始描述感到困惑。您的串行代码以更好的方式解释Q。

我认为您正在寻找的是AF :: ScanbyKey -http://arrayfire.org/docs/group __scan __scan __func__func__scanbykey.htm-尽管我尚不确定如何为您的用例生成钥匙作为inteces范围(作为interes范围(从头开始(似乎重叠。范围的长度似乎也不相同。

相关内容

  • 没有找到相关文章

最新更新