Python - 不确定为什么两个列表看起来相同(一个在函数中更新)



我创建了一个列表列表(每行有 784 个元素( - 这是图像数据 28x28 矩阵

train_data, train_labels = X[:60000], Y[:60000]

为了模糊图像 - 这里有两个函数可以计算每个像素的新值 - 基于 8x28 矩阵中的 28 个相邻元素的平均值(为简单起见,忽略第一/最后一行和第一/最后一列,即从 2-26 而不是 0-27 循环(

def new_func(x_train_data,train_data):
    for index in range(x_train_data.shape[0]):
        imgvector = x_train_data[index].reshape(28, 28)
        for iblur in range(2, 27):
            for jblur in range(2, 27):
                imgvector[iblur][jblur] = getNewVaueofPixel(imgvector, iblur, jblur)
        print "blurring complete"
        x_train_data[index] = imgvector.reshape(1, 784)
        print np.array_equal(x_train_data[index], train_data)
def getNewVaueofPixel(imgvector, iblur, jblur):
    pixelval = 0.0  
    for ib in range(-1, 2):
        for jb in range(-1, 2):
            pixelval = pixelval + imgvector[iblur + ib][jblur + jb]
    outval = round(pixelval / 8.0, 12)
    return ('{:.12f}'.format(outval)).rstrip('0') or 0.

下面是函数调用:

x_train_data = train_data[:1]
x_train_labels = train_labels[0]
new_func(x_train_data,train_data[0])

函数中的下行返回 true,但是当我查看 x_train_data[index] 的值时,它与原始值不同,并且已正确更新。

print np.array_equal(x_train_data[index], train_data) 

我花了超过 12 个小时来调试它,但没有取得任何进展。只是不明白为什么train_data在什么时候更新

x_train_data = train_data[:1] 

应创建列表的副本,而不是对它的引用。感谢任何帮助。

使用 x_train_data = train_data[:1] 在 numpy 中创建一个视图,正如@hpaulj所说。

例如:

import numpy as np
x = np.arange(5)
y = x[:3]
print(x)    # [0 1 2 3 4]
print(y)    # [0 1 2]
y[0] = 14   # This changes x as well
print(x)    # [14  1  2  3  4]
print(y)    # [14  1  2]

此外,在普通的python中,它会创建一个浅拷贝。

x = [1, [2, 3]]
y = x[:]
print(x)    # [1, [2, 3]]
print(y)    # [1, [2, 3]]
y[1].append(7)   # changes x as well
print(x)   # [1, [2, 3, 7]]
print(y)   # [1, [2, 3, 7]]

相关内容

  • 没有找到相关文章

最新更新