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

2024-09-30 20:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

对于模糊图像-这里有两个函数,计算每个像素的新值-基于28x28矩阵中8个相邻元素的平均值(为简单起见,忽略第一/最后一行和第一/最后一列,即从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\u train\u data[index]的值时,它与原始值不同,并且已正确更新。你知道吗

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

我花了12个多小时调试这个,但没有取得任何进展。只是不明白为什么列车运行时数据会更新

x_train_data = train_data[:1] 

应该创建列表的副本,而不是对它的引用。谢谢你的帮助。你知道吗


Tags: in图像元素列表fordataindexlabels
1条回答
网友
1楼 · 发布于 2024-09-30 20:32:34

使用x_train_data = train_data[:1]在numpy中创建一个view,正如@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中,它会创建一个shallow copy。你知道吗

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]]

相关问题 更多 >