创建一个可变长度的二维列表 [torch]
Create a 2D list with variable length [torch]
我想创建一个二维列表,其中可以包含可变长度的元素,例如,如果我在 MATLAB 中有一个 10x10 列表,我可以
定义为:
z = cell(10,10)
并通过这样做开始分配一些元素:
z{2}{3} = ones(3,1)
z{1}{1} = zeros(100,1)
z{1}{2} = []
z{1}{3} = randn(20,1)
...
在 torch 中定义这种空二维列表的最佳方法是什么?此外,有没有办法利用张量结构来做到这一点?
在 python 中,我可以做一些事情来定义一个空的 10x10 二维列表:
z = [[None for j in range(10)] for i in range(10)]
我对火炬的最佳猜测是做类似
的事情
z = torch.Tensor(10,10)
for i=1,10 do
for j=1,10 do
z[{{i},{j}}] = torch.Tensor()
end
end
但是,这行不通,在张量中定义张量似乎不是个好主意...
这是对此处提出的问题的跟进(但是在 link 中,它在 python 中提出):
根据我阅读的文档,张量仅支持原始数值数据类型。您将无法将张量用于您的预期用途。杠杆表。
local function makeMatrix(initialVal, ...)
local isfunc = type(initialVal) == "function"
local dimtable = {...}
local function helper(depth)
if depth == 0 then
return isfunc and initialVal() or initialVal
else
local plane = {}
for i = 1, dimtable[depth] do
plane[i] = helper(depth-1)
end
return plane
end
end
return helper(#dimtable)
end
p = makeMatrix(0, 2, 3, 5) -- makes 3D matrix of size 2x3x5 with all elements initialized to 0
makeMatrix(torch.Tensor, m ,n)
答案来自 Torch 的 Google 小组论坛。同意表格是解决方案:
z = {}
for i=1,10 do
z[i] = {}
for j=1,10 do
z[i][j] = torch.Tensor()
end
end
我想创建一个二维列表,其中可以包含可变长度的元素,例如,如果我在 MATLAB 中有一个 10x10 列表,我可以 定义为:
z = cell(10,10)
并通过这样做开始分配一些元素:
z{2}{3} = ones(3,1)
z{1}{1} = zeros(100,1)
z{1}{2} = []
z{1}{3} = randn(20,1)
...
在 torch 中定义这种空二维列表的最佳方法是什么?此外,有没有办法利用张量结构来做到这一点?
在 python 中,我可以做一些事情来定义一个空的 10x10 二维列表:
z = [[None for j in range(10)] for i in range(10)]
我对火炬的最佳猜测是做类似
的事情z = torch.Tensor(10,10)
for i=1,10 do
for j=1,10 do
z[{{i},{j}}] = torch.Tensor()
end
end
但是,这行不通,在张量中定义张量似乎不是个好主意...
这是对此处提出的问题的跟进(但是在 link 中,它在 python 中提出):
根据我阅读的文档,张量仅支持原始数值数据类型。您将无法将张量用于您的预期用途。杠杆表。
local function makeMatrix(initialVal, ...)
local isfunc = type(initialVal) == "function"
local dimtable = {...}
local function helper(depth)
if depth == 0 then
return isfunc and initialVal() or initialVal
else
local plane = {}
for i = 1, dimtable[depth] do
plane[i] = helper(depth-1)
end
return plane
end
end
return helper(#dimtable)
end
p = makeMatrix(0, 2, 3, 5) -- makes 3D matrix of size 2x3x5 with all elements initialized to 0
makeMatrix(torch.Tensor, m ,n)
答案来自 Torch 的 Google 小组论坛。同意表格是解决方案:
z = {}
for i=1,10 do
z[i] = {}
for j=1,10 do
z[i][j] = torch.Tensor()
end
end