首页 > 解决方案 > 列表中的元素在 python 中被覆盖

问题描述

几天来,我一直在努力弄清楚为什么我的 python 列表中的项目被覆盖了。基本上我必须实现一个将矩阵旋转 8 次的函数。

def rotate_ring(matrix, offset):
dim = len(matrix[0])
print(dim)
last_element = matrix[offset][offset]
for j in range(1 + offset, dim - offset):
    matrix[offset][j-1] = matrix[offset][j]
matrix[offset][dim-1-offset] = matrix[1+offset][dim-1-offset]
for i in range(1 + offset, dim - offset):
    matrix[i-1][dim-1-offset] = matrix[i][dim-1-offset]
matrix[dim-1-offset][dim-1-offset] = matrix[dim-1-offset][dim-2-offset]
for j in range(1+offset, dim-offset):
    matrix[dim-1-offset][dim-j] = matrix[dim-1-offset][dim-j-1]
matrix[dim-1-offset][offset] = matrix[dim-2-offset][offset]
for i in range(1+offset, dim-offset):
    matrix[dim-i][offset] = matrix[dim-i-1][offset]
matrix[1+offset][offset] = last_element
return matrix


def rotate_matrix(matrix):
dim = len(matrix[0])
for offset in range(0, int(dim/2)):
    matrix = rotate_ring(matrix, offset)
return matrix

上面的函数是旋转矩阵的函数,它们这样做是因为我检查了它们。实现了这些功能后,我实现了另一个功能

def compass_filter(kernel):
#result = np.zeros(gray.shape, dtype=np.float)
#result  = np.zeros(gray.shape, dtype=np.float)
results = []
results.append(kernel)
for i in range(0,7):
    kernel = rotate_matrix(kernel) #rotate the kernel
    print(kernel)
    results.append(kernel) #appending to results
   
return results

迭代 8 次(因为我总是有 8 个内核)并将内核附加到列表中。我遇到的问题是打印了新的旋转内核:

在此处输入图像描述

,但是当我打印最终列表时,我看到的只是最后一个内核打印了 8 次。有人有什么问题吗?我还尝试在 for 循环中为新元素创建另一个列表,然后将其附加到循环外的列表中。谢谢! 在此处输入图像描述

标签: pythonnumpyopencv

解决方案


请更改功能罗盘过滤器如下:

def compass_filter(kernel):
    results = [] 
    results.append(kernel)
    for i in range(7):
        kernel_ = np.array([rotate_matrix(kernel)])
        print(kernel_)
        results.append(kernel_)
   
   return results

推荐阅读