【发布时间】:2023-04-11 08:34:02
【问题描述】:
我有一个相当简单的问题,但我想不出一个优雅的解决方案。
我有一个推力代码,它产生包含值的相同大小的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元素,并且可以有更多的10c向量。
然后我考虑过这样做:不要让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)
但是,如何为reduce by key操作编写这样的函子?
【问题讨论】:
-
您实际上是在尝试在行主矩阵中查找每列的最小元素的索引。