24小时热门版块排行榜    

查看: 4350  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 欢迎发来filecode的Mz6后的代码验证其规律 +32 医学老男孩 2026-08-13 74/3700 2026-08-16 21:05 by 医学老男孩
[基金申请] 时间戳又变了8-15 +13 archvillain 2026-08-15 25/1250 2026-08-16 20:13 by zhaosm1982
[基金申请] 2027广东省杰青 +3 奶牛小黑 2026-08-15 6/300 2026-08-16 20:07 by 奶牛小黑
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +9 Ldrop2023 2026-08-13 9/450 2026-08-16 13:24 by wukun_007
[基金申请] 咱们一起用铁证分析2026国家社科基金中标与否 +7 启萌科技 2026-08-12 26/1300 2026-08-16 12:35 by 启萌科技
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +11 家与远方 2026-08-10 16/800 2026-08-16 10:28 by ray43
[基金申请] 有时候,自然基金真的不能太认真 (我的申报经验) +10 majunge000 2026-08-11 12/600 2026-08-16 08:18 by xli1984
[基金申请] 小木虫上这么多卖论文的,真有人买论文么?感觉没必要啊 +12 Tide man 2026-08-10 13/650 2026-08-15 16:34 by 氺木
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
[基金申请] 是这周出结果还是下周出结果? +4 yuleib84 2026-08-11 4/200 2026-08-14 23:05 by lfy8008
[基金申请] 奇怪,两个人的filecode固定段从头到尾一模一样 +8 布布和一二 2026-08-10 11/550 2026-08-14 14:58 by Equinoxhua
[硕博家园] 读博的好处 +4 lnee 2026-08-11 4/200 2026-08-14 10:20 by ahsoarli
[基金申请] 静等基金结果 +8 gjjjzhong 2026-08-10 21/1050 2026-08-13 17:56 by 且听虎啸
[基金申请] 重要来源:本周末出结果 +10 瞬息宇宙 2026-08-12 10/500 2026-08-13 15:46 by likettle
[基金申请] Filecode 又变了,巨变 +3 WH3796 2026-08-12 4/200 2026-08-13 14:13 by 小木虫6752397
[基金申请] 分享一下我之前已中青C的计划书的filecode +4 布布和一二 2026-08-11 5/250 2026-08-13 12:56 by cratir
[基金申请] 结合人工智能,周易传统文化,filecode打分制来了,3分以上希望很大。 +3 Tide man 2026-08-12 4/200 2026-08-13 08:35 by ZJTJZ
[基金申请] 2019年青年基金涵评意见,大家看看几个A,几个B? +11 Tide man 2026-08-11 11/550 2026-08-13 07:35 by 撸猫猫
[基金申请] 什么时候出结果,有咨询渠道??? +3 Tide man 2026-08-11 3/150 2026-08-11 17:54 by kudofaye
[基金申请] 国自然结果 +4 Vierhys 2026-08-10 8/400 2026-08-10 15:06 by Vierhys
信息提示
请填处理意见