【发布时间】:2020-09-17 04:56:13
【问题描述】:
我在没有库的帮助下使用列表创建张量。 Tensor 类有一个名为 shape_data 的方法,它通过获取维度和子列表来创建张量。
def shape_data(self, dim, sub):
if dim >= len(self.shape):
return
elif (len(sub) == 0) & (dim < (len(self.shape) - 1)):
for i in range(self.shape[dim]):
sub.append([])
self.shape_data(dim + 1, sub[i])
elif len(sub) == 0:
if len(self.data) > self.shape[dim]:
sub = self.data[0:self.shape[dim]]
self.data = self.data[self.shape[dim]:]
elif len(self.data) <= self.shape[dim]:
sub = self.data[0:]
self.data = []
while len(sub) != self.shape[dim]:
sub.append(0)
data0 = [0, 1, 2, 3, 4, 5, 0.1, 0.2, -3, -2, -1, 3, 2, 1]
shape0 = [5, 2]
tensor0 = Tensor(data0, shape0)
这是我得到的输出
[[], [], [], [], []]
与我想要的
[[0, 1], [2, 3], [4, 5], [0.1, 0.2], [-3, -2]]
我的问题是,我在这里遗漏了什么数字没有被成功复制?
【问题讨论】:
-
请提供预期的MRE。显示中间结果与预期结果的偏差。我们应该能够将您的代码块粘贴到文件中,运行它并重现您的问题。我看不到类结构如何支持您面临的问题,也看不到您的跟踪尝试的结果。请参阅debugging help 这个可爱的参考。
-
你的意思是你想做
return [data0[i:i+shape0[1]] for i in range(0,shape0[0]*shape0[1],shape0[1])]?或者您是否需要递归处理更多维度的形状? -
@PatrickArtner 我需要递归处理更多维度的形状
-
@mlai 这个问题的答案也是为未来的读者准备的——所以编辑答案并删除“用于学习体验”的固定代码是不行的。
标签: python list recursion memory