Python 二维二进制文件的读取

Python 二维二进制文件的读取,python,matlab,python-2.7,Python,Matlab,Python 2.7,Matlab代码: binary = 'binaryfile.png'; fid = fopen(binary , 'rb'); data2d(:,:) = fread(fid, [10,10], ['int16=>','double']) 我正在寻找上述代码的Python等价物。我可以使用numpy.fromfile函数来读取,但它不允许我在二维中读取。任何关于如何在Python中实现这一点的帮助或想法 binary = 'binaryfile.png'; fid = open(bi

Matlab代码:

binary = 'binaryfile.png';
fid = fopen(binary , 'rb'); 
data2d(:,:) = fread(fid, [10,10], ['int16=>','double'])
我正在寻找上述代码的Python等价物。我可以使用numpy.fromfile函数来读取,但它不允许我在二维中读取。任何关于如何在Python中实现这一点的帮助或想法

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中是否有相同的东西,那还是很好的。…

尽管可以做您想要做的事情,但您不会在Python中这样做,因为您不需要这样做。要执行此操作,请执行以下操作:

binary = 'binaryfile.png'
data2d = np.fromfile(binary, count=10*10, dtype='int16').reshape(10, 10).astype('double')
numpy中的重塑基本上不需要时间和额外的内存,不像MATLAB那样需要昂贵的操作。这是因为在numpy
restrape
中,不像在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的行中读取10次。有趣的是,至少在我的测试中,这种方法实际上比我描述的第一种方法慢,可能是因为阅读时更复杂。从磁盘读取文件总是很慢,因此任何使其更复杂的操作都会影响性能