python调用julia_把一个python程序改写成Julia

本文对比了Python和Julia在字典操作、数据类型、循环和条件表达式等方面的差异,并通过一个具体例子展示了将Python程序转换为Julia后的性能变化。在将Julia代码中的BigInt改为Int128后,运行速度提升了20%。
摘要由CSDN通过智能技术生成

Julia代码臃肿了不少,速度两者差不多.

两种语言还有下列不同:

1.字典对于不存在的键值,julia没有默认值,必须用hashkey函数判断,直接访问报错,python默认0。

2.对于整数和Bool两种类型的变量。julia不能相加,python可以加。

3.对于BigInt类型,julia必须用赋值显式声明变量类型,python可以自动判断并设置。

4.Bool类型常量,julia全小写,Python首字母大写,其余小写。

5.for循环的上下边界,julia都包含,Python的Range包含下限,不包含上限。

6.'或','否'条件运算符,julia用||,==0 ,Python用or和not

7.遍历字典时,Julia必须定义一个游标类型,Python可以直接用变量代表键值。

8.判断循环正常结束,没有中途退出。Python有一个else语法,Julia只能用标志变量。

python

from collections import defaultdict

def f(l):

d = defaultdict(int)

for i in range(1, 10):

d[1<

for i in range(l-1):

d, d2 = defaultdict(int), d

for (bm,dbm,bl), cn in d2.items():

for j in range(10):

nbm = ndbm = 0

t = bl

for k in range(l):

c = (k==0) + ((bm&(1<

if not c: continue

z = (k * 10 + j) % l

if z==0:

if t+c>1: break

t = True

if (nbm & (1<1:

ndbm |= 1<

nbm |= 1 << z

else:

d[nbm, ndbm, t] += cn

return sum(c for (bm, dbm, bl), c in d.items() if bl)

def go(N):

return sum(map(f, range(1, N+1)))

go(15)

julia

function f(l::Int)

d=Dict{Tuple{Int,Int,Bool},BigInt}()

for i in 1:10-1

a=(1<

if haskey(d, a) d[a]+=1 else d[a]=1 end

end

for i in 0:l-1-1

d, d2 = Dict{Tuple{Int,Int,Bool},BigInt}(), d

for x in d2

(bm,dbm,bl), cn = x.first,x.second

#println(bm)

for j in 0:10-1

nbm = ndbm = 0

t = bl

flag =0

for k in 0:l-1

c = (k==0) + ((bm&(1<

if c==false

continue

end

z = (k * 10 + j) % l

if z==0

if t+c>1

flag=1

break

end

t = true

end

if ((nbm & (1<1

ndbm |= 1<

end

nbm |= 1 << z

#else: k not break out

end #k

if flag==0

a=(nbm, ndbm, t)

if haskey(d, a) d[a]+=cn else d[a] = cn end

#println(d[a])

end

end #j

end #x

end #i

sumc=BigInt(0)

for x in d

(bm,dbm,bl), c1 = x.first,x.second

if bl sumc+=c1 end

end

return sumc

end

function go(N::Int)

#return sum(map(f, 1:N+1-1))

sumc=BigInt(0)

for x in 1:N+1-1

sumc+=f(x)

end

return sumc

end

go(15)

把上述julia代码中的BigInt都修改为Int128,其他不动,速度提高了20%.

julia> @time go128(19)

39.090864 seconds (245.53 M allocations: 3.208 GB, 6.47% gc time)

3079418---040719

julia> @time go(19)

51.460135 seconds (301.17 M allocations: 3.782 GB, 11.80% gc time)

3079418---040719

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值