哪种是在内存中存储对称矩阵的最佳方法?
在不降低结构速度和复杂性的情况下节省一半空间将是一件好事.这是一个与语言无关的问题,但如果你需要做一些假设,只要假设它是一个很好的旧的简单编程语言,如C或C++.
只要有一种方法可以保持简单,或者只是当矩阵本身非常大时,这似乎是有道理的,我是对的吗?
仅仅为了形式,我的意思是这个断言对于我想要存储的数据总是如此
matrix[x][y] == matrix[y][x]
Run Code Online (Sandbox Code Playgroud) 我不确定这是否是我遇到的一个基本问题,但我现在几天都无法解决这个问题......
我目前正在用C#编写.NET库(使用.NET 3.5).除此之外,它还包括将三重Int32数组(每个几MB)写入远程缓存(memcached服务器)和读回这些数组的功能.问题是,即使memcached服务器在本地计算机上运行,我可以提出的每个实现花费大约1.2秒来写入10MB数据,另外大约1.2秒用于读取相同数据.
但是,为了比较性能,我只需写入剪贴板就将写入替换为缓存服务器,并注意到执行写入仍需要1.2秒.我打电话给测试方法(如下所示),包括一个stopwatch
开始/停止基准测试.方法是:
public void writeCachedImageData(int[,] atoms, int[,] noAtoms, int[,] dark, int cameraID, int runID, int seqID)
{
Clipboard.SetData(DataFormats.Serializable, atoms);
Clipboard.SetData(DataFormats.Serializable, noAtoms);
Clipboard.SetData(DataFormats.Serializable, dark);
}
Run Code Online (Sandbox Code Playgroud)
对于基准测试,每个阵列为1000x1000.基本上,我的问题是:
1)从这次测试得出的结论是否正确,我的瓶颈是某种方式从应用程序到外部的数据传输速率?和
2)如果是这样,我可以做些什么来提高从应用程序到剪贴板或最终memcached服务器的数据传输速率?
按照以下步骤,使用cMinor 有效地复制c-sharp中的对称矩阵.
关于如何通过使用矩阵的数组实现来构建具有一个行向量和一个列向量的对称方阵乘法的一些输入,我将非常有趣,而不是经典
long s = 0;
List<double> columnVector = new List<double>(N);
List<double> lineVector = new List<double>(N);
//- init. vectors and symmetric square matrix m
for (int i=0; i < N; i++)
{
for(int j=0; j < N; j++){
s += lineVector[i] * columnVector[j] * m[i,j];
}
}
Run Code Online (Sandbox Code Playgroud)
感谢您的输入 !