Python for循环覆盖以前的迭代

时间:2017-06-20 02:15:50

标签: python numpy

我正在尝试创建一个周期性正方形的numpy数组,这样当我使用plt.imshow时,我会看到一个带有周期性白色方块的黑色正方形。稍后需要使用该阵列进行傅立叶分析。 imshow参考仅用于问题的可视化。

我可以创建黑色数组和单个白色方块,但我遇到的问题是每次迭代都会覆盖最后一次,直到我只留下最后一个白色方块。

代码:

import numpy as np
import matplotlib.pyplot as plt

N = 500
x_wid = 10
y_wid = 10

grid = np.arange(1,N)
X_GRID, Y_GRID = np.meshgrid(grid, grid)

square = np.zeros([N, N])

for x_pos in np.arange(0, N, N/10):
    for y_pos in np.arange(0, N, N/10):
        square = np.logical_and((np.abs(X_GRID-x_pos) < x_wid/2),
            (np.abs(Y_GRID-y_pos) < y_wid/2))

plt.imshow(square, cmap="gray")
plt.show()

1 个答案:

答案 0 :(得分:0)

原始网格的大小需要为N grid = np.arange(0,N)。然后,这将与square具有相同的大小,从而允许在for循环中使用简单的+=来追加&#39;每次迭代。

代码:

import numpy as np
import matplotlib.pyplot as plt

N = 500
x_wid = 10
y_wid = 10

grid = np.arange(0,N)
X_GRID, Y_GRID = np.meshgrid(grid, grid)

square = np.zeros([N, N])
final_square = np.zeros([N, N])

for x_pos in np.arange(0, N, N/10):
    for y_pos in np.arange(0, N, N/10):
        square = np.logical_and((np.abs(X_GRID-x_pos) < x_wid/2),
            (np.abs(Y_GRID-y_pos) < y_wid/2))
        final_square += square

plt.imshow(final_square, cmap="gray")
plt.show()