小白求问如何修改如下Julia代码使得运行时间更快?

哦哦~好的,谢谢Gnimuc,global const a=1,这样是可行的是吗?

是的,还有就是在函数里面用const关键词是无效的,如果是可变参数,就放到函数的argument里,如果真的是常量,就直接定义成global const, 命名习惯全大写+下划线:I_AM_CONST

谢谢!!! Gnimuc,你可以帮我看看现在我改完后的程序吗?已经没有任何问题了,运行速度也上去了,你看看哪里还可以优化哒?

优化到什么程度要看需求,如果已经能满足应用了就OK。

做优化通常需要借助于Profiler,对Julia很熟的话,小问题可以肉眼profile,但细节的还是要用Profiler。要用Profiler,必须要把代码完整的跑起来,所以需要一个MWE(minimal working example)。有时候写一个MWE也挺费劲的,所以还是自己学一下Profiler的用法为妙。

1 个赞

你这代码写的怎么跟fortran 一样。。。。

能给个样本文件"N500K4.txt"吗?程序是需要运行的,没有数据运行一下,谁都很难帮你改。还要告诉我们你用的库具体有哪些。这样其他人才能复制你的问题。

是吗:joy:没有用过Fortran欸…要是能像Fortran那样运行的快就好了,你有什么建议吗?

可以呀 ~ 这已经是我改完之后的版本了,但我知道还有很多不足的地方,能不能帮我改改, 谢谢啦~~~~~ 链接:https://pan.baidu.com/s/1hxaqcZ_Q1Z_wreHzD9ZbIg 密码:4m9q

(他是在说你这个代码写的真烂…)

… 皱眉头的表情… 那怎么把代码写好一点啊,我贴出来就是想寻求帮忙啊,这已经是我自己改过的版本了,然后你们一个个都没有正面回答我怎么把这个改好,还略加嘲笑:frowning_face:

还有 Roger,你上次不是说我自己改完之后帮我再改改吗?:disappointed_relieved: 我也真的很想看看写的好的程序是什么样呀,这样才会进步呀

没人能替你完成作业啊。想写好的代码静下心来多读读别人的代码(GitHub上很多)多思考。你这里先学会把东西写进函数而不是都弄到外面吧。学会声明类型封装,而不是动不动一堆参数。

1 个赞

别百度网盘,贴上来,我没有网盘下不了的。

百度网盘可以直接下载的呀~ GitHub…em…好吧 我一直不知道怎么用 怎么会有那么多文件…

如果你真的想写好代码去读读GitHub上面随便一个和你相关的包的写法。学学样子。你现在这个代码别说Julia了,Python都不好看…

不过总的来说先学会怎么把动系写到函数里面去。看不懂英文,有很多Python教程也。这个层面和Julia也差不多,参考参考(所以我说现在中文资料少,真的不适合小白,编程没入门的话真的很痛苦啊)

总的来说还是很容易的,把你当for循环拆一拆,尽量别出现函数变量之外的变量。最后基本上在最外面只有函数调用。是最好。不要使用任何全局global变量。能不写const就不写。

百度会要求下客户端的。我拒绝使用任何百度产品。而且要求别人给你改大段代码本身就容易被嘲讽(这个其实挺费时间的,尤其是代码本身写的不容易懂的时候)…Julia这里的风气真的已经很友好了。

轮回循环啥的都可以放在函数里面,外面那些全局变量全部作为参数。最后整个程序最好通过调用一个函数开始运行。

哦,把文档里面performance tips里面的问题过一遍,你现在还有里面说了的但是没有改的(比如全局变量)

好的,谢谢你这么长的回复。有一点不懂,“最后整个程序最好通过调用一个函数开始运行”,这是否意味着函数的嵌套,只有嵌套了最后才只用调用一个函数吧,但是上次Gnimuc说,最好不要有函数的嵌套…我有点困惑了

不要在函数里面声明函数。。。调用总是可以的嘛

我说的是函数定义嵌套:

function foo(a, b, c, d)
    e = a * b
    f  = c * d
    function nested_foo()
        a + b + c + d
    end

    return e + f + nested_foo()
end
1 个赞