Python 你会用numpy';将文件从文件存储到数据阵列中?
我对python还是相当陌生的。我已经能够编写一个程序,从二进制文件中读取文件,并将其中的数据存储在几个数组中。现在,我已经能够用这个程序完成一些其他任务,我正试图回顾我的所有代码,看看哪里可以使它更高效,同时更好地学习Python。特别是,我正在尝试更新文件中数据的读取和存储。使用Python 你会用numpy';将文件从文件存储到数据阵列中?,python,arrays,file,numpy,io,Python,Arrays,File,Numpy,Io,我对python还是相当陌生的。我已经能够编写一个程序,从二进制文件中读取文件,并将其中的数据存储在几个数组中。现在,我已经能够用这个程序完成一些其他任务,我正试图回顾我的所有代码,看看哪里可以使它更高效,同时更好地学习Python。特别是,我正在尝试更新文件中数据的读取和存储。使用numpy的fromfile解包数据要比struct.unpack方法快得多,并且对于1D数组结构非常有效。但是,我有一些数据存储在2D数组中。我似乎被困在如何在2D阵列中实现相同类型的存储上。有没有人对我如何才能做
numpy
的fromfile
解包数据要比struct.unpack
方法快得多,并且对于1D数组结构非常有效。但是,我有一些数据存储在2D数组中。我似乎被困在如何在2D阵列中实现相同类型的存储上。有没有人对我如何才能做到这一点有任何想法或提示
我的基本程序结构如下:
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
如果需要任何澄清,请告诉我。另一个选项是使用numpy.save和numpy.load来编写.npy文件。另一个选项是使用numpy.save和numpy.load来编写.npy文件。
packHeader = [[0 for x in range(14)] for y in range(packets)]
data = [[0 for x in range(dataLength)] for y in range(packets)]
for i in range(packets):
packHeader[i][0] = unpack('>H', file.read(2)) #Model Num
packHeader[i][1] = unpack('>H', file.read(2)) #Packet ID
packHeader[i][2] = unpack('>I', file.read(4)) #Coarse Timestamp
....#Continuing on
packHeader[i][13] = unpack('>i', file.read(4)) #4 bytes of reserved space
packHeader[i]=list(chain(*packHeader[i])) #Deals with the tuple issue ((x,),(y,),...) -> (x,y,...)
data[i] = [unpack('<h', file.read(2)) for j in range(dataLength)] #Actual data
data[i] = list(chain(*data[i])) #Deals with the tuple issue ((x,),(y,),...) -> (x,y,...)