【发布时间】:2022-11-21 19:21:07
【问题描述】:
我在程序中使用 COO 格式的稀疏矩阵。 COO 格式使用 3 个独立的向量来表示矩阵:rowindex、colindex 和 values。我需要先按 rowindex 对矩阵进行排序,然后再按 colindex 对矩阵进行排序。例如,如果向量包含:
rowindex = [1 2 2 1 0 2 0 1 0 2 1 2]
colindex = [7 7 2 1 3 9 8 6 6 0 3 4]
values = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2]
(意味着矩阵中的元素 [1,7] 的值为 0.1,元素 [2,7] 的值为 0.2,元素 [2,2] 的值为 0.3,等等)排序后的矩阵应该是:
rowindex = [0 0 0 1 1 1 1 2 2 2 2 2]
colindex = [3 6 8 1 3 6 7 0 2 4 7 9]
values = [0.5 0.9 0.7 0.4 1.1 0.8 0.1 1.0 0.3 1.2 0.2 0.6]
我在期望的结果中留了一些空间,以(希望)更好地展示我想要实现的目标。
这可以以某种方式实现吗:
- 在 C++ 中使用可用的排序函数
- 没有使用额外的内存(例如额外的向量),因为我使用的稀疏矩阵很大并且几乎占用了所有内存
- 无需求助于将矩阵表示为结构数组(我知道可以在其中使用 sort() 函数)。
我发现了一些关于对多个向量进行排序的答案,只对其中一个向量的值进行排序。他们不需要根据第二个向量对第一个向量中具有相同值的元素进行排序。
【问题讨论】: