24小时热门版块排行榜    

查看: 4367  |  回复: 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后的代码验证其规律 +38 医学老男孩 2026-08-13 89/4450 2026-08-18 08:27 by 医学老男孩
[基金申请] 时间戳变了,能看出什么问题? +4 基诺咪客 2026-08-17 5/250 2026-08-18 08:03 by 基诺咪客
[基金申请] 93BebMhtakh前后11位开头都是大写 +4 且听虎啸 2026-08-17 5/250 2026-08-18 00:49 by 蔡棒棒菂
[基金申请] 感觉是下周放榜了 +6 angus9576 2026-08-17 11/550 2026-08-17 23:57 by angus9576
[基金申请] filecode=后面第一个是大写字母 +8 wangze12014 2026-08-14 10/500 2026-08-17 17:05 by xter9665
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +12 Ldrop2023 2026-08-13 15/750 2026-08-17 15:02 by 小豌豆_发芽
[基金申请] 今天系统多次维护,明天很可能放榜! +8 zju2000 2026-08-16 9/450 2026-08-17 12:20 by lmz0216
[基金申请] 时间戳又变了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 奶牛小黑
[基金申请] 快农历七夕节了,轻松一下,男人悄悄话,女施主请不要进来。 +3 Tide man 2026-08-14 3/150 2026-08-16 17:47 by jurkat.1640
[基金申请] 咱们一起用铁证分析2026国家社科基金中标与否 +7 启萌科技 2026-08-12 26/1300 2026-08-16 12:35 by 启萌科技
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +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
[硕博家园] 读博的好处 +4 lnee 2026-08-11 4/200 2026-08-14 10:20 by ahsoarli
[基金申请] 重要来源:本周末出结果 +10 瞬息宇宙 2026-08-12 10/500 2026-08-13 15:46 by likettle
[基金申请] 不应该看fileCode +7 且听虎啸 2026-08-12 9/450 2026-08-13 14:27 by flydreamws
[基金申请] Filecode 又变了,巨变 +3 WH3796 2026-08-12 4/200 2026-08-13 14:13 by 小木虫6752397
[基金申请] 结合人工智能,周易传统文化,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 撸猫猫
信息提示
请填处理意见