我仍然是python的新手。我已经能够编写一个程序,它将从二进制文件中读取一个文件并将数据存储在几个数组中。现在我已经能够完成这个程序的其他一些任务,我正在尝试回顾我的所有代码,看看我可以在哪里提高效率,在此过程中更好地学习Python。特别是,我正在尝试更新从文件中读取和存储数据。使用numpy
的{{1}}在解包数据方面比fromfile
方法快得多,并且对于一维数组结构非常有用。但是,我有一些数据存储在2D数组中。我似乎坚持如何在2D阵列中实现相同类型的存储。有没有人对我如何能够执行此操作有任何想法或提示?
我的基本程序结构如下:
struct.unpack
基本上这就是我现在所拥有的。有没有办法我可以做到这一点而不做循环?经历那个循环似乎并不特别快或者是numpy-ish。
作为参考,使用from numpy import fromfile
import numpy as np
file = open(theFilePath,'rb')
####### File Header #########
reservedParse = 4
fileHeaderBytes = 4 + int(131072/reservedParse) #Parsing out the bins in the file header
fileHeaderArray = np.zeros(fileHeaderBytes)
fileHeaderArray[0] = fromfile(file, dtype='<I', count=1) #File Index; 4 Bytes
fileHeaderArray[1] = fromfile(file, dtype='<I', count=1) #The Number of Packets; 4 bytes
fileHeaderArray[2] = fromfile(file, dtype='<Q', count=1) #Timestamp; 16 bytes; 2, 8-byte.
fileHeaderArray[3] = fromfile(file, dtype='<Q', count=1)
fileHeaderArray[4:] = fromfile(file, dtype='<I', count=int(131072/reservedParse)) #Empty header space
####### Data Packets #########
#Note: Each packet begins with a header containing information about the data stream followed by the data.
packets = int(fileHeaderArray[1]) #The number of packets in the data stream
dataLength = int(28672)
packHeader = np.zeros(14*packets).reshape((packets,14))
data = np.zeros(dataLength*packets).reshape((packets,dataLength))
for i in range(packets):
packHeader[i][0] = fromfile(file, dtype='>H', count=1) #Model Num
packHeader[i][1] = fromfile(file, dtype='>H', count=1) #Packet ID
packHeader[i][2] = fromfile(file, dtype='>I', count=1) #Coarse Timestamp
....#Continuing on
packHeader[i][13] = fromfile(file, dtype='>i', count=1) #4 bytes of reserved space
data[i] = fromfile(file, dtype='<h', count=dataLength) #Actual data
而不是unpack
的for循环结构是:
numpy
如果需要澄清,请告诉我。