c++ - 稀疏矩阵的子矩阵
问题描述
我正在编写一个 C++ 矩阵库(https://github.com/frozenca/Ndim-Matrix)。我计划支持稀疏矩阵。让我头疼的是实现子矩阵运算。
例如,我期望这样的事情:
// (5 0 6 0)
// (0 1 0 2)
// (3 0 4 0)
// (0 7 0 8)
SparseMat<int> m1 {{5,0,6,0},{0,1,0,2},{3,0,4,0},{0,7,0,8}};
// (1 0)
// (0 4)
auto m2 = m1.submatrix({1,1},{3,3}); // non-owning view for m1's internal buffer
m2 *= 2;
// now m is
// (5 0 6 0)
// (0 2 0 2)
// (3 0 8 0)
// (0 7 0 8)
// (1 0)
// (0 2)
// (3 0)
SparseMat<int> m3 {{1, 0}, {0, 2}, {3, 0}};
// (2 0)
// (0 16)
// (6 0)
auto m4 = matmul(m3, m2); // shouldn't copy m1.
对于密集矩阵,我的库将子矩阵实现为具有指向缓冲区和本地步幅的指针的非拥有视图。上面的代码适用于密集矩阵。对于稀疏矩阵,我怎样才能以高性能(即没有元素复制)来模拟它?
解决方案
推荐阅读
- python-3.x - 虚拟麦克风中的音频已饱和
- html - 从 Ilustrator 导入 SVG 不会产生清晰的线条
- apache-spark - Spark 3.1 在 Java 中加入两个数据集
- ruby-on-rails - 为什么 WSL2/Ubuntu 上的密钥可以打开凭证文件,但在另一台机器/服务器上却没有?
- java - 使用 @SpringConfigureMockMvc 和 Hibernate 方言的意外行为
- python - 有没有办法在python中调用多个同名文件来合并一个
- r - R:了解“makePSOCKcluster”的影响
- python - 如何从 URL 而不是文件对图像进行 base64 编码?
- signal-processing - 过滤具有可变和漂移基线的噪声信号
- java - 如何在 Postgres SQL(使用 liquibase 的 JPA)中定义/保存 java.util.Calendar?