c++中两个字符串的互相关

cross correlation of two string in c++

本文关键字:字符串 两个 c++      更新时间:2023-10-16

考虑我有两个1和0的矩阵。我想把它保存为bool Matrix,但opencv没有这样存储,而是存储为uchar Mat。因此,我的空间增加了8倍。(每个元素是8位而不是1位)。

我的代码基本如下:

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.

这部分我做了1000万次。因此加载需要花费大量时间。我的矩阵是1K*1K,所以我可以将它们存储为1MB,但我希望它们是128KB(matlab存储大约178KB)。

这是我的问题:我想把矩阵存储为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=Bystr2=Cz

是否有方法交叉关联str1和str2

提前感谢,

注意:这不是一个答案,而是一个长注释。我把它作为一个答案发布,以避免在OP.的评论部分发送垃圾邮件

存储1M的数字类型元素在任何现代计算机上都不会成为问题。

你应该学习更多关于C和内存存储的知识;bool不是一个基本类型,因此bool存储只是虚拟存在的。将几个比特打包成一个char是个好主意,但如果你想提高效率,你应该看看C++的比特集。

要明白,在硬盘上存储数据的方式和最适合处理活动内存(如RAM)的格式之间可能存在显著差异。这可能是Matlab存储空间奇怪的原因;存储附加信息和/或在看似低效的存储单元中通常是期望的,以使算法更容易写入并且基本操作在CPU上更快地执行。

总的来说,我认为像你建议的那样切换到"bool-packed chars"存储的优势在处理速度方面可以忽略不计,而且肯定会导致编程工作困难,并模糊维护过程。您最好坚持使用字符进行处理,并切换到单位存储进行磁盘写操作。