使用C++的结果是大约120 MB,这几乎不是我所期望的,因为原始的接近130MB。,python,c++,zlib,Python,C++,Zlib" /> 使用C++的结果是大约120 MB,这几乎不是我所期望的,因为原始的接近130MB。,python,c++,zlib,Python,C++,Zlib" />

使用Python和C++; 我用ZLIB压缩一些数据,我遇到了一个奇怪的问题:用Python压缩的数据比用C++压缩的数据要小。我有130MB的模拟数据要压缩保存(对于所有必要的数据,文件太多) 使用C++,我有一些类似的东西: //calculate inputData (double * 256 * 256 * 256) unsigned int length = inputLength; unsigned int outLength = length + length/1000 + 12 + 1; printf("Length: %d %d\n", length, outLength); Byte *outData = new Byte[outLength]; z_stream strm; strm.zalloc = Z_NULL; strm.zfree = Z_NULL; strm.next_in = (Byte *) inputData; strm.avail_in = length; deflateInit(&strm, -1); do { strm.next_out = outData; strm.avail_out = outLength; deflate(&strm, Z_FINISH); unsigned int have = outLength - strm.avail_out; fwrite(outData, 1, have, output); } while(strm.avail_out == 0); deflateEnd(&strm); delete[] outData; < >使用C++的结果是大约120 MB,这几乎不是我所期望的,因为原始的接近130MB。

使用Python和C++; 我用ZLIB压缩一些数据,我遇到了一个奇怪的问题:用Python压缩的数据比用C++压缩的数据要小。我有130MB的模拟数据要压缩保存(对于所有必要的数据,文件太多) 使用C++,我有一些类似的东西: //calculate inputData (double * 256 * 256 * 256) unsigned int length = inputLength; unsigned int outLength = length + length/1000 + 12 + 1; printf("Length: %d %d\n", length, outLength); Byte *outData = new Byte[outLength]; z_stream strm; strm.zalloc = Z_NULL; strm.zfree = Z_NULL; strm.next_in = (Byte *) inputData; strm.avail_in = length; deflateInit(&strm, -1); do { strm.next_out = outData; strm.avail_out = outLength; deflate(&strm, Z_FINISH); unsigned int have = outLength - strm.avail_out; fwrite(outData, 1, have, output); } while(strm.avail_out == 0); deflateEnd(&strm); delete[] outData; < >使用C++的结果是大约120 MB,这几乎不是我所期望的,因为原始的接近130MB。,python,c++,zlib,Python,C++,Zlib,在python中: from array import array import zlib // read data from uncompressed file arrD = array.array('d', data) file.write(zlib.compress(arrD)) 使用Python的结果是使用相同的输入数据大约50MB,少于一半。C++代码主要基于Python中使用的代码,这使得这个问题更加奇怪。 对于C++,我使用VisualStudio 2010专业,用自己编译的ZL

在python中:

from array import array
import zlib
// read data from uncompressed file
arrD = array.array('d', data)
file.write(zlib.compress(arrD))
使用Python的结果是使用相同的输入数据大约50MB,少于一半。C++代码主要基于Python中使用的代码,这使得这个问题更加奇怪。 对于C++,我使用VisualStudio 2010专业,用自己编译的ZLIB 1.2.8。
对于Python,我使用的是官方的Python 3.4.2。

1。两次按压都使用完全放气吗?2.它们是否使用相同的块大小等(由于压缩需要处理“适合合理数量的内存”,因此算法通常具有“视为一个块”的最大数据大小,但通常可配置为允许调整性能和内存使用)@我不确定zlib参数,因为我没有太多地使用它。但是看看python源代码,它没有对默认参数做任何特殊的处理。至于z_流参数,我使用了与python中相同的参数。您如何知道它是相同的输入数据?@MarkAdler,因为它是我自己的数据,我确保使用相同的数据。也就是说,我确实弄明白了为什么python有更好的压缩率:在为python保存数据时(从双精度到浮点转换),会损失一些精度。当我在C++侧剃掉精度时,我得到了更好的压缩。双浮动?那是尺码的一半!“相同的输入数据”是指相同的位对位。它不是相同的输入数据,因为它只有一半大小。