【发布时间】:2015-04-06 01:21:52
【问题描述】:
我是python初学者,写了一段代码:
g=rand_image
for i in range(100):
for j in range (100):
G = np.fft.fft2(g)
theta = angle(G)
G_prim = image ** 0.5 * exp(1j * theta)
g_prim = np.fft.ifft2(G_prim)
for k in range(300):
for l in range(300):
if g_prim[k, l].imag > 1e-8 or g_prim[k, l] < 0:
g[k,l]=g[k,l]-(2-0.02*i)*g_prim[k,l]
else:
g[k ,l] = g_prim[k,l]
我比较了两张图片,rand_image 和 image。运行这样的代码需要 2 小时。我想让它更快地以某种方式替换底部的 2 个循环(比较 2 个大小为 300px*300px 的图像),也许是 2 张图片的地图并替换某些值?虽然我不确定这是否可能。
我需要增加 i 的值并为每个 i 值多次运行代码。
【问题讨论】:
-
您应该至少摆脱内部循环,使用 numpy 数组研究条件赋值。或者至少只循环通过满足条件的索引列表。也许这有帮助:stackoverflow.com/questions/3409255/…
-
这不是很有用,因为我不会做一个简单的动作,比如为满足特殊条件的元素添加独立值。我实际上必须拥有这些元素的坐标(准确地说是像素),以便我可以将这些元素与第二张图片中相同坐标的元素进行比较:g[k,l]=g[k,l]-( 2-0.02*i)*g_prim[k,l]
-
什么是
theta?缩放器?和image? -
对于
i,j的不同值,g[k,l]被多次覆盖 - 这是您的意图吗?这看起来像是在浪费无意义的计算。k,l循环是否正确缩进? -
theta 是复数的相位。
标签: python dictionary nested-loops