【发布时间】:2020-01-27 02:50:18
【问题描述】:
我正在尝试创建一个 numpy 数组,其中每个元素都是一个 (48,48) 形状的 numpy 数组,本质上是一个大列表,我可以在其中迭代并每次检索不同的 48x48 数组。
for i in range(1):
new_image = np.fromstring(train_np[i][1],dtype=int,sep=" ")
new_image = new_image.reshape(48,48) #create the new 48x48 correctly
image_train = np.stack([image_train,new_image]) #this line only works once
当 range 为 1 时(只运行一次),堆栈返回 (2, 48 48) 的预期结果形状。运行不止一次,结果
ValueError: all input arrays must have the same shape
在这种情况下,有没有比 np.stack 更好的操作?我想迭代并看到形状变成 (2,48,48) -> (3,48,48) -> (4,48,48) ... 等等。
【问题讨论】:
-
为什么不预先分配一个大数组并在每个循环中填充一部分呢?或者,如果您必须使用
np.stack,那么将所有数组附加到常规python列表中,然后最后将它们全部连接在一起可能会更快。 -
np.concatenate允许您指定要连接的轴,但同样,预分配可能更快。 -
np.stack沿新轴加入形状相同的数组列表。它并不意味着迭代使用。concatenate/stack系列中的任何一个都不应被迭代使用。使用这些时要密切注意尺寸。 -
听起来你需要一个 numpy 数组的列表,而不是一个 numpy 数组的 numpy 数组。你能澄清一下吗?
标签: python arrays numpy multidimensional-array