考虑我有两个1和0的矩阵。我想将其保存为bool Matrix
,但opencv
不会以该方式存储,而是将其存储为uchar Mat
。所以我的空间增加了8倍。 (每个元素是8位而不是1位)。C++中两个字符串的互相关
我的代码基本如下:
Mat mat1, mat2; //I want each index to be 1 bit
load(mat1); //data size is not important in memory
load(mat2);
corr2(mat1, mat2); //this corr2 is same as Matlab's cross correlation.
我在做这部分10M倍。因此加载需要很多时间。我的矩阵是1K * 1K,所以我可以将它们存储为1 MB,但我希望它们是128 KB(大约178 KB的matlab存储)。
这里是我的问题:我想存储我的矩阵为string
而不是Mat
操作,我想使用字符串。
例如,尺寸mat1 and mat2
是2 * 8。
MAT1:
0 1 0 0 0 0 1 0 (66=B)
0 1 1 1 0 1 1 1 (122=y)
MAT2:
0 1 0 0 0 0 1 1 (67=C)
0 1 1 1 1 0 0 0 (122=z)
我将存储str1=By
和str2=Cz
有没有办法穿越归属关系STR1,STR2?
由于提前,
如果你正在做这个操作10百万次,那是一个非常大的问题。每次加载操作需要20-30毫秒'10^7 * 25ms = 250000秒= 4200分钟= 70小时= 3天。'如果我可以从25毫秒减少到3毫秒,加载时间将是'9小时' – smttsp 2014-09-04 11:12:02
什么阻止你批量加载矩阵?装载1GB内存的缓存系统完全可以接受;那将是你的矩阵的1M。重复的结果存储,它仍然没问题。磁盘操作上的10个大型读/写操作可用于处理该大小:) – Sheljohn 2014-09-04 11:12:44
1GB内存只能加载1024(1K)个文件而不是1M个文件。即使我一次可以加载1M个文件,我仍然可以加载1TB。为什么我应该加载1TB而不是'1TB/8'?我误解了你的意思吗? – smttsp 2014-09-04 11:20:48