二维读取二进制文件

时间:2015-07-22 13:59:44

标签: python matlab python-2.7

Matlab代码:

binary = 'binaryfile.png';
fid = fopen(binary , 'rb'); 
data2d(:,:) = fread(fid, [10,10], ['int16=>','double'])

我正在寻找上述代码的Python等价物。我可以使用numpy.fromfile函数来读取但它不允许我在二维中读取。任何帮助或想法如何在Python中做到这一点。

2 个答案:

答案 0 :(得分:2)

虽然可以做你想做的事,但你不会在Python中这样做,因为你不需要。你想做什么:

binary = 'binaryfile.png'
data2d = np.fromfile(binary, count=10*10, dtype='int16').reshape(10, 10).astype('double')
numpy中的

reshape基本上没有时间也没有额外的内存,不像MATLAB那样昂贵的操作。这是因为numpy reshape并没有像在MATLAB中那样复制数据,这只是查看相同底层数据的另一种方式。

所以在numpy中,这是做你想做的最好的方式。您正在寻找的MATLAB功能实际上是一种解决MATLAB语言限制的方法。 numpy没有这些限制,允许更简单的功能。通常,将任务分成一系列简单明确定义的操作而不是将所有内容都放在一个函数中,这被认为是一种很好的编程习惯。但是由于语言的限制,这在MATLAB中比在python中要困难得多,导致MATLAB通常具有更复杂的功能。

现在,正如我所说,有可能做你想做的事情,但是没有任何真正的优势,阅读起来更加丑陋,所以我强烈建议你使用上述方法。但是这就是你如何在numpy中做同样的事情:

binary = 'binaryfile.png'
data2d = np.fromfile('binaryfile.png', count=10, dtype=('int16', 10)).astype('double')

这基本上是告诉它在10行int16行中读取10次。有趣的是,至少在我的测试中,这种方法实际上比我描述的第一种方法更慢,这可能是由于阅读时的复杂性更高。从磁盘读取文件总是很慢,所以任何使它变得更复杂的都会损害性能。

答案 1 :(得分:0)

binary = 'binaryfile.png';
fid = open(binary , 'rb'); 
data1d = numpy.fromfile(fid, count = 10*10, dtype = numpy.int16)
data2d = numpy.double(data1d.reshape(10,10))

我设法在其他方面做到了。但是,知道matlab中是否存在相同的内容仍然会很好.....

相关问题