我有一个相当简单的问题,但我无法找到一个优雅的解决方案。
我有一个推力代码,它产生c
包含值的相同大小的向量。假设这些c
向量中的每一个都有一个索引。我想为每个向量位置获取c
值最低的向量的索引:
例子:
C0 = (0,10,20,3,40)
C1 = (1,2 ,3 ,5,10)
我会得到一个向量,C
其中包含具有最小值的向量的索引:
result = (0,1 ,1 ,0,1)
我曾考虑过使用推力 zip 迭代器来做这件事,但遇到了问题:我可以压缩所有c
向量并实现一个任意转换,该转换采用一个元组并返回其最小值的索引,但是:
- 如何迭代元组的内容?
- 据我了解,元组最多只能存储
10
元素,并且可以存储的不仅仅是10
c
向量。
然后我考虑过这样做:与其使用c
单独的向量,不如将它们全部附加到一个向量C
中,然后生成引用位置的键并按键执行稳定的排序,这会将来自同一位置的向量条目重新组合在一起。在将给出的示例中:
C = (0,10,20,3,40,1,2,3,5,10)
keys = (0,1 ,2 ,3,4 ,0,1,2,3,4 )
after stable sort by key:
output = (0,1,10,2,20,3,3,5,40,10)
keys = (0,0,1 ,1,2 ,2,3,3,4 ,4 )
然后使用向量中的位置生成键,使用向量的索引压缩输出,c
然后使用自定义函子按键执行归约,每个归约输出具有最低值的索引。在示例中:
input = (0,1,10,2,20,3,3,5,40,10)
indexes= (0,1,0 ,1,0 ,1,0,1,0 ,1)
keys = (0,0,1 ,1,2 ,2,3,3,4 ,4)
after reduce by keys on zipped input and indexes:
output = (0,1,1,0,1)
但是,如何编写这样的函子来进行按键归约操作呢?