如何解决在 Lua 中查看文件目录
我正在尝试为研究项目改编一些代码,但以前从未用 Lua 编写过代码。因此,我不确定路径和加载是如何工作的。我有这些包含蛋白质信息的 CSV 文件,计划是将它们转换为神经网络的图像。但是我不确定将这些 CSV 文件放入哪些属性和文件目录。有没有人有任何见解?
local M={}
require 'paths';
torch.manualSeed(123)
local function LoadCSV(proteinName)
local file = io.open(proteinName,'r')
local header = file:read()
local dat = {}
for l in file:lines() do
local row = l:split(',')
table.insert(dat,row)
end
return torch.Tensor(dat)
end
function M.Maper(cancerType)
local pros = paths.dir('Data/' .. cancerType)
os.execute("mkdir " .. "Data/" .. cancerType .. "_Map")
table.remove(pros,1)
table.remove(pros,1)
table.sort(pros)
local n = #pros
for i=1,n,3 do
local tens = {}
print(pros[i])
for j=1,3 do
local map = torch.zeros(16,200,200)
gene = LoadCSV('Data/' .. cancerType .. '/' .. pros[i+j-1])
atoms = gene:size(1)
for a=1,atoms do
--print(gene[a][17],gene[a][18])
map[{ {},{math.min(gene[a][17]+1,200)},{math.min(gene[a][18]+1,200)} }] = gene[{ {a},{1,16} }]
end
tens[j] = map:clone()
end
torch.save('Data/' .. cancerType .. '_Map/' .. pros[i]:sub(1,4) .. '.dat',tens)
end
end
local function Shuffle(...)
local args = {...}
local n = #args[1]
local count = 0
count=(torch.type(n)=='number' and n or n[1])
for t=1,count do
local k = math.random(count)
for i,v in ipairs{...} do
v[t],v[k] = v[k],v[t]
end
end
return {...}
end
function M.DataCollect(positive,negative,neutral)
local posProtein = paths.dir('Data/' .. positive)
table.remove(posProtein,1)
table.remove(posProtein,1)
local negProtein = paths.dir('Data/' .. negative)
table.remove(negProtein,1)
table.remove(negProtein,1)
--local nutProtein = paths.dir('Data/' .. neutral)
--table.remove(nutProtein,1)
--table.remove(nutProtein,1)
local label = torch.zeros(#posProtein+#negProtein)
local allProtein = {}
local index=1
for i=1,#posProtein do
table.insert(allProtein,'Data/' .. positive .. '/' .. posProtein[i])
label[index]=1
index=index+1
end
for i=1,#negProtein do
table.insert(allProtein,'Data/' .. negative .. '/' .. negProtein[i])
end
--for i=1,#nutProtein do
-- table.insert(allProtein,'Data/' .. neutral .. '/' .. nutProtein[i])
--end
_ = Shuffle(allProtein,label)
return allProtein,label
end
function M.Slice(tbl,first,last,step)
local sliced = {}
for i = first or 1,last or #tbl,step or 1 do
sliced[#sliced+1] = tbl[i]
end
return sliced
end
function M.Fetch(names,h,w)
local pros = torch.Tensor(3,#names,16,w)
local threads = require 'threads'
local pool = threads.Threads(4)
for i=1,#names do
pool:addjob(function()
local temp = torch.load(names[i])
return i,temp
end,function(id,pr)
--print(pr,pros:size())
pros[{ {1},{id},{},{} }] = pr[1]:clone()
pros[{ {2},{} }] = pr[2]:clone()
pros[{ {3},{} }] = pr[3]:clone()
end
)
end
pool:synchronize()
pool:terminate()
return pros
end
function M.Dataset(proteins,labels,meani,stdvi)
local dataset = {}
dataset.data = proteins
dataset.label = labels
setmetatable(dataset,{__index = function(t,i)
return {
t.data[i],t.label[i]
}
end}
);
function dataset:size()
return self.data:size(1)
end
local mean = torch.zeros(16)
local stdv = torch.zeros(16)
if meani~=nil then
for i=1,16 do
dataset.data:select(3,i):add(-meani[i])
dataset.data:select(3,i):div(stdvi[i])
end
else
for i=1,16 do
mean[i] = dataset.data:select(3,i):mean()
dataset.data:select(3,i):add(-mean[i])
stdv[i] = dataset.data:select(3,i):std()
dataset.data:select(3,i):div(stdv[i])
end
end
return dataset,mean,stdv
end
return M
local M={}
require 'paths';
torch.manualSeed(123)
local function LoadCSV(proteinName)
local file = io.open(proteinName,stdv
end
return M
解决方法
乍一看,这似乎是一个需要在 Lua 脚本中或在解释器中交互使用的库。无论哪种情况,解释器都应该从包含 Lua 项目的目录启动。该目录还应包含一个 Data/
子目录。 Data/
目录应包含以包含 CSV 文件的癌症类型命名的其他目录。
例如:
path/to/lua/project/
└── Data
├── cancer1
│ ├── protein1.csv
│ └── protein2.csv
└── cancer2
├── protein1.csv
├── protein2.csv
└── protein3.csv
例如,您可以尝试:
cd path/to/lua/project
lua your_script.lua
除此之外,我对你的项目实在无话可说。
我可以澄清一些看起来很奇怪的线条——你说你不确定“路径”是如何工作的。在您显示的库代码中,require "paths"
在显示的库的全局范围内运行名为 paths.lua
的文件中的代码。该文件可能与您的其余代码位于同一目录中,但可以位于 package.path
中列出的目录中的任何位置。
这个 (paths
) 不是标准的 Lua 库,但它看起来很简单。似乎 paths.dir
是一个函数,它返回一个包含目录内容作为字符串的表。连续两次调用 table.remove
的奇数行几乎肯定会获取这些目录内容并删除隐藏的 .
和 ..
文件(尽管可能值得注意的是它的执行效率非常低) ).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。