python优化问题_Python优化问题?

好吧,我最近做了这个作业(别担心,我已经做过了,但是用c++)但是我很好奇怎么用python来做。问题是两个发光的光源。我不想谈这些细节。在

下面是代码(我在后一部分中对其进行了优化):import math, array

import numpy as np

from PIL import Image

size = (800,800)

width, height = size

s1x = width * 1./8

s1y = height * 1./8

s2x = width * 7./8

s2y = height * 7./8

r,g,b = (255,255,255)

arr = np.zeros((width,height,3))

hy = math.hypot

print 'computing distances (%s by %s)'%size,

for i in xrange(width):

if i%(width/10)==0:

print i,

if i%20==0:

print '.',

for j in xrange(height):

d1 = hy(i-s1x,j-s1y)

d2 = hy(i-s2x,j-s2y)

arr[i][j] = abs(d1-d2)

print ''

arr2 = np.zeros((width,height,3),dtype="uint8")

for ld in [200,116,100,84,68,52,36,20,8,4,2]:

print 'now computing image for ld = '+str(ld)

arr2 *= 0

arr2 += abs(arr%ld-ld/2)*(r,g,b)/(ld/2)

print 'saving image...'

ar2img = Image.fromarray(arr2)

ar2img.save('ld'+str(ld).rjust(4,'0')+'.png')

print 'saved as ld'+str(ld).rjust(4,'0')+'.png'

我已经设法优化了它的大部分,但是在2for-s部分仍然存在巨大的性能差距,而且我似乎想不出一种方法来绕过使用普通阵列操作的方法。。。我愿意接受建议:D

编辑:

针对弗拉德的建议,我将公布问题细节:

有2个光源,每个光源都以正弦波的形式发出光:

E1=E0*sin(ω1*时间+phi01)

E2=E0*sin(ω2*时间+φ02)

为了简单起见,我们考虑ω1=ω2=ω=2*π/T和φ01=φ02=φ0

将x1看作是与平面上某一点的第一个光源的距离,则该点的光强度为

Ep1=E0*sin(ω*时间-2*π*x1/λ+φ0)

哪里

λ=光速*T(振荡周期)

考虑到平面上的两个光源,公式变成

Ep=2*E0*cos(PI*(x2-x1)/λ)sin(ω时间-PI*(x2-x1)/λ+phi0)

从中我们可以看出,当

(x2-x1)/λ=(2*k)*π/2

以及最低限度

(x2-x1)/λ=(2*k+1)*PI/2

其中k是介于和之间的整数

对于给定的时间,给定光源的坐标,对于已知的lambda和E0,我们必须编写一个程序来绘制光的外观

我想我已经尽可能地优化了这个问题。。。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值