Optimization 以Torch张量高效读取、解析和存储.txt文件内容

Optimization 以Torch张量高效读取、解析和存储.txt文件内容,optimization,machine-learning,lua,torch,Optimization,Machine Learning,Lua,Torch,我有大量的.txt文件(大约1000万),每个文件都有相同的行数/列数。它们实际上是一些单通道图像,像素值用空格分隔。这是我为完成这项工作而编写的代码,但速度非常慢。我想知道是否有人能提出一种更优化/高效的方法: require 'torch' f = assert(io.open(txtFilePath, 'r')) local tempTensor = torch.Tensor(1, 64, 64):fill(0) local i = 1 for line in f:lines() do

我有大量的.txt文件(大约1000万),每个文件都有相同的行数/列数。它们实际上是一些单通道图像,像素值用空格分隔。这是我为完成这项工作而编写的代码,但速度非常慢。我想知道是否有人能提出一种更优化/高效的方法:

require 'torch'

f = assert(io.open(txtFilePath, 'r'))
local tempTensor = torch.Tensor(1, 64, 64):fill(0)
local i = 1
for line in f:lines() do
    local l = line:split(' ')
    for key, val in ipairs(l) do
        tempTensor[{1, i, key}] = tonumber(val)
    end
    i = i + 1
end
f:close()

简而言之,如果可能,请更改源文件

我唯一能建议的是使用二进制数据而不是txt作为源。 你有长期的方法:
f:lines()
line:split(“”)
tonumber(val)
。它们都使用字符串作为变量

据我所知,您的文件如下:

0 10 20

11 18 22

因此,将源代码更改为二进制,如下所示:

其中
是十六进制形式的字节,即
12
是16,等等

阅读

fid = io.open(sup_filename, "rb")
while true do
  local bytes = fid:read(1)
  if bytes == nil then break end -- EOF
  local st = bytes[0]
  print(st)
end

fid:close()
这将大大加快


可能正在使用正则表达式(而不是
:split()
line()
)对您有帮助,但我不认为。

谢谢,但由于某些原因,我无法将文件格式更改为二进制。现在,我应该找到一个更快的解决方案来读取原始文件。这是不可能的,imo.
io
相当快。也许SSD能帮上忙。