+++警告,以下内容包含非常简单的编程+++
+++请帮助!!! +++
嘿,我正在玩我很长一段时间阅读惯例并且我还没有找到一个好的和快速的方法!
我有类似这样的东西:一个巨大的二进制文件,我想把它切成一个numpy-array!
我创建了这个结构,从文件读入一定数量的字节:
mydt = numpy.dtype([
('col1', np.uint64),
('col2', np.int32),
('cols3_56', np.float32, (53,))
])
这样读:
data_block = numpy.fromfile(openfile, dtype=mydt, count=ntimes)
我得到的是这样的:
[(88000031189210L, 1, [-1000.0, -1000.0, -1000.0, -2.0, -2.0, -2.0, 65004000.0, 0.0, 760680000.0, 0.0, 0.12124349921941757, 0.04971266910433769, 2328.39990234375, 0.00013795999984722584, 0.0, 0.0, -1.0, -1.0, -1.0, 65004000.0, -1.0, 760680000.0, 0.0, 0.0, -1.0, 825680000.0, 0.0, -1.0, -1.0, -1.0, 157630.0, 0.0, 756310.0, 0.0, -1.0, -1.0, 0.0, 5.250500202178955, 0.0, 5.250500202178955, -13.602999687194824, -16.760000228881836, -17.283000946044922, -16.95800018310547, -17.513999938964844, -17.57200050354004, -13.657999992370605, -16.77199935913086, -17.291000366210938, -16.9689998626709, -17.520999908447266, -17.57200050354004, 1.0]), [(88......1L, 1, [-1000.0, ....]), ....
然后我将这个数据块扩展到我的数组
data_block_array.extend(data_block)
......这一百万次......
我现在想要访问两件事:
我认为在计数上做了一些循环:
i=0
while i<count:
self.data_array[i,element1] = data_block_array[i][1]
self.data_array[i,element8] = data_block_array[i][2][13]
这是令人难以置信的慢......我想开发一种非常快速简便的方法来过滤我的数据并提取我感兴趣的列。欣赏一些建议和见解!
答案 0 :(得分:1)
你可以尝试memmap:
import numpy as np
mydt = np.dtype([
('col1', np.uint64),
('col2', np.int32),
('cols3_56', np.float32, (53,))
])
data = np.zeros(1000, dtype=mydt)
tmp = data.view(np.float32)
tmp[:] = np.random.rand(len(tmp))
data.tofile("tmp.dat")
mm = np.memmap("tmp.dat", mydt, "r")
assert np.all(data["col2"] == np.asarray(mm["col2"]))
assert np.all(data["cols3_56"][7] == np.asarray(mm["cols3_56"][7]))