首页 > 解决方案 > 当我通过数组变量的列表名称引用它时,为什么Python中列表中的数组形状不同?

问题描述

train_images 是一个列表 [] 填充有图像 ('im')。我遍历列表(train_images)并更改此列表中每个“im”的形状。但是为什么这两种形状不同呢?'im' 与 train_images[x] 相同,不是吗?

for im in train_images:
    im = transform.resize(im,(50,45),mode='constant',anti_aliasing=True)
    im = image.img_to_array(im)
    im = im/255
    im = im.flatten()
    
print(train_images[0].shape) #(200, 180, 3)
print(im.shape) #(6750,)

标签: pythoniteration

解决方案


'im' 与 train_images[x] 相同,不是吗?

如果您没有im在循环内重新分配,那么im最终将成为最后一个in train_images(即train_images[-1])。这已经是与 不同的数组train_images[0],但是是的,它将具有相同shape的数组(因为它们是相同 Numpy 数组的切片)。

但是,在您的循环体中,您有对im. for循环构造在每个循环的开头设置 的值,im但它也在循环内部被替换......所以循环im之后值是分配的最后一个值,即flatten操作的结果。

(如果你对为什么调用.flatten会改变shape数据感到困惑......我不知道该告诉你什么。你为什么认为它被称为“扁平化”?)


推荐阅读