我只是想把项目添加到列表中,我不能!我的代码:
import numpy as np
data = [[]] * 10
for i in range(0, len(data)):
slice = np.random.randn(100, 100, 3)
print('before: ', np.shape(data))
print('slice: ', np.shape(slice))
data[i].append(slice)
print('after: ', np.shape(data))
结果如下:
before: (10, 0)
slice: (100, 100, 3)
after: (10, 1, 100, 100, 3)
...
before: (10, 0)
slice: (100, 100, 3)
after: (10, 10, 100, 100, 3)
因此,(100,100,3)未插入data[0]
中的正确位置,但创建了额外的维度!为什么?我怎么能避免它?
结果列表的正确尺寸应为(10, 1 ,100,100,3) - 不是(10, 10 ,100,100,3)
答案 0 :(得分:2)
主要罪魁祸首是
data = [[]] * 10
创建一个空列表并将其复制9次以上,因此实际上您将插入相同的列表10次。例如:
In [113]: data = [[]] * 10
In [114]: data[0].append(1)
In [115]: data
Out[115]: [[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
你应该
[]
并致电.append
但不是两者兼而有之。
我建议声明一个空的list
:
data = [[] for _ in range(10)]
现在,在循环中调用.append
:
data.append(slice)
您可以使用data = np.array(data)
将结果转换为数组。这是一个示例:
data = [[] for _ in range(10)]
for i in range(0, len(data)):
slice = np.random.randn(100, 100, 3)
data[i].append(slice)
print(np.array(data).shape)
(10, 1, 100, 100, 3)