24小时热门版块排行榜    

查看: 4528  |  回复: 27

walk1997

金虫 (著名写手)

引用回帖:
7楼: Originally posted by chyanog at 2013-08-03 20:11:32
Compile一点也不鸡肋,并不是只能编译一些简单函数,一些数值计算程序可以提速30~100倍以上,但使用一些高级的函数时(NSolve,NIntegrate等)就没必要Compile了,不会有加速效果,
使用CompilationTarget -> & ...

闲着 又琢磨了下这个代码
我感觉完成这个功能mathematica本身的代码会这样
test2[m_] :=
  Position[FractionalPart@Sqrt@Array[(1.0 #1^2 + 1.0 #2^2) &, {m, m}],
  0.0];
(test2[1000] // Length)/2 // AbsoluteTiming
这样的代码速度大概比编译的慢5倍 (扣去本身重复计算了一半 大概是2-3倍 编译的效果还是明显 这里position大约花了一半的时间)
不知道mathematica本身的代码能否再优化下?
11楼2013-08-07 11:29:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

walk1997

金虫 (著名写手)

test3[m_] :=
  Position[FractionalPart@Sqrt@N@Array[(#1*#1 + #2*#2) &, {m, m}],
   0.0];

可以进一步提高下
12楼2013-08-07 11:32:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zdzqy

新虫 (小有名气)

引用回帖:
12楼: Originally posted by walk1997 at 2013-08-07 11:32:38
test3 :=
  Position;

可以进一步提高下

这个代码复制过来貌似乱了,能否给我发个nb的文件?
13楼2013-08-07 11:47:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

walk1997

金虫 (著名写手)

引用回帖:
13楼: Originally posted by zdzqy at 2013-08-07 11:47:40
这个代码复制过来貌似乱了,能否给我发个nb的文件?...

纯文本复制过来的
我没贴过文件

test3[m_]:=Position[FractionalPart@Sqrt@N@Array[(#1*#1+#2*#2)&,{m,m}],0.0];
(test3[1000]//Length)/2//AbsoluteTiming
{0.1404003,1034}
14楼2013-08-07 11:55:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chyanog

金虫 (小有名气)

引用回帖:
12楼: Originally posted by walk1997 at 2013-08-07 11:32:38
test3 :=
  Position;

可以进一步提高下

可以提速的,向量化的方法也很快,和Compile后的速度可以一比,但是一个缺点是比较耗内存
CODE:
SparseArray[ 1 - Unitize@  FractionalPart@Sqrt@N@Array[#1^2 + #2^2 &, {1000, 1000}]][ "NonzeroPositions"] // Length // AbsoluteTiming

(*---------------------------*)
SparseArray[ 1 - Unitize@FractionalPart@Sqrt@N@(#1^2 + #2^2) & @@ {#, Transpose@#} &[ConstantArray[Range[1000], 1000]]][
   "NonzeroPositions"] // Length // AbsoluteTiming

15楼2013-08-07 11:56:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

walk1997

金虫 (著名写手)

引用回帖:
15楼: Originally posted by chyanog at 2013-08-07 11:56:26
可以提速的,向量化的方法也很快,和Compile后的速度可以一比,但是一个缺点是比较耗内存


SparseArray // Length // AbsoluteTiming

(*---------------------------*)
SparseArray[ 1 - Unitize@Fraction ...

谢谢指出
平常可能都不太注意怎么构建列表的效率 学习了
是的 比较耗内存
如果能直接一步构造出想要的列表就好
16楼2013-08-07 12:04:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

walk1997

金虫 (著名写手)

引用回帖:
15楼: Originally posted by chyanog at 2013-08-07 11:56:26
可以提速的,向量化的方法也很快,和Compile后的速度可以一比,但是一个缺点是比较耗内存


SparseArray // Length // AbsoluteTiming

(*---------------------------*)
SparseArray[ 1 - Unitize@Fraction ...

btw:
  想到一个问题 严格来说 这样求解出来可能会有错误
因为有可能a^2+b^2//N//Sqrt 可能非常非常接近整数
不知道在机器精度下 第一次出现错误的解会在哪里?
不知道存在不?
17楼2013-08-07 12:12:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chyanog

金虫 (小有名气)

被Compile的函数也可以具有Listable属性,下面这两个函数编译前后相差大概50倍
CODE:
Clear["`*"]
mandel[a_, it_: 100] :=
  Module[{z = 0. I, c = a[[2]] + a[[1]] I},
   Catch[Do[If[Abs[z] > 2, Throw@i];
     z = z^2 + c;, {i, it}]; it]
   ];

mandelc =  Compile[{{a, _Real, 1}, {it, _Integer}},
   Module[{z = 0. I, c = a[[2]] + a[[1]] I},
    Catch[Do[If[Abs[z] > 2, Throw@i];
      z = z^2 + c;, {i, it}]; it]
    ], RuntimeAttributes -> {Listable}, RuntimeOptions -> "Speed"];

d1 = mandelc[Outer[List, Range[-1., 1, 2./199], Range[-2., 0.5, 2.5/199]], 100]; // AbsoluteTiming
d2 = Table[ mandel[{i, j}], {i, -1., 1, 2./199}, {j, -2., 0.5,  2.5/199}]; // AbsoluteTiming

d1 == d2
Colorize[#, ColorFunction -> Hue] & /@ {d1, d2}

18楼2013-08-07 12:15:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chyanog

金虫 (小有名气)

引用回帖:
17楼: Originally posted by walk1997 at 2013-08-07 12:12:55
btw:
  想到一个问题 严格来说 这样求解出来可能会有错误
因为有可能a^2+b^2//N//Sqrt 可能非常非常接近整数
不知道在机器精度下 第一次出现错误的解会在哪里?
不知道存在不?...

这个不太清楚了,
19楼2013-08-07 12:25:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zdzqy

新虫 (小有名气)

引用回帖:
10楼: Originally posted by walk1997 at 2013-08-06 23:58:27
学习了  非常好的例子
函数内部的运算量/次数很大的时候 加速比较明显
也和运算的种类有关 编译成C 和编译成 WMV 也差个几倍...

真是谢谢二位的不吝赐教,但是说来说去,并没有说道解决问题的核心,我很诧异,这是求助帖。
20楼2013-08-07 15:16:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zdzqy 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[有机交流] OpenAI又攻克数学难题了,离AI做有机合成还有多远? +8 wangyl_123 2026-10-10 13/650 2026-10-14 15:12 by zuesli
[基金申请] 申请科研项目纯靠实力能成功吗? 200+4 David1982 2026-10-13 7/350 2026-10-14 14:24 by 13108017953
[硕博家园] 极限拉扯,如何抉择 +10 Isak0320 2026-10-12 14/700 2026-10-14 11:39 by thegarfield
[教师之家] 课题组会帮你通过考核么? +4 好运来~9527 2026-10-10 7/350 2026-10-13 08:41 by xli1984
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:34 by XQNyDCa1Tk5n
[公派出国] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:26 by XQNyDCa1Tk5n
[找工作] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 22:26 by XQNyDCa1Tk5n
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:15 by XQNyDCa1Tk5n
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 22:11 by XQNyDCa1Tk5n
[教师之家] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:06 by XQNyDCa1Tk5n
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 14:25 by VOMexwnDzOFZ
[教师之家] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 (EPI+-1)(金币-50) +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 14:05 by VOMexwnDzOFZ
[考研] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:51 by VOMexwnDzOFZ
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:45 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:54 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:34 by VOMexwnDzOFZ
[考博] 招收博士生一名 +3 mandolin 2026-10-10 3/150 2026-10-11 10:21 by 不是山谷!
[公派出国] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 qR2AdCWTVtkw 2026-10-09 4/200 2026-10-11 03:14 by M0zrYVSAnxpE
[有机交流] 各位大佬,路线设计求助 +6 zapen 2026-10-08 8/400 2026-10-10 15:59 by zapen
[有机交流] 我应该选哪条合成路线让实验成功率高一些? +5 jing816y 2026-10-08 9/450 2026-10-10 09:05 by zapen
信息提示
请填处理意见