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


#25

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


#26

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


#27

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


#29

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


#30

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

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

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

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


#31

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


#32

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


#33

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


#34

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


#35

我说的是函数定义嵌套:

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

#36

当然,我举的这个例子为了方便嵌一下也是没问题的,nested_foo调用的时候不用写a,b,c,d参数了, nested_foo复杂的话我不喜欢嵌套。


#37

不要著急。慢慢來。如果你真的想學,沒有學不會的。

我們零起點一步步來。

先不要管你那個程序。 我試試看能不能幫你。每個問題搞清楚再走下一步。

我們從數據開始。你不用上傳整個文件。拷貝粘貼前十行。然後告訴我總共有幾行可以嗎?


#39

谢谢谢谢!!

这个文件一共有500行,每行4个数据。下面我提取了20行数据,你只用把程序里面的Ntotal=20即可

   1.1200000e+02   2.2700000e+02   2.4100000e+02   3.9400000e+02
   1.1000000e+01   5.6000000e+01   3.3400000e+02   3.7600000e+02
   1.5800000e+02   2.0500000e+02   3.7700000e+02   4.1400000e+02
   3.7400000e+02   4.1400000e+02   4.3600000e+02   4.4100000e+02
   6.4000000e+01   7.1000000e+01   3.1000000e+02   4.8500000e+02
   1.6000000e+01   3.4600000e+02   3.8700000e+02   4.6200000e+02
   1.3500000e+02   1.7900000e+02   2.1100000e+02   2.7400000e+02
   1.3100000e+02   1.4500000e+02   2.7700000e+02   3.2500000e+02
   4.7000000e+01   3.5300000e+02   3.9300000e+02   4.9800000e+02
   1.7000000e+01   2.7900000e+02   4.0200000e+02   4.3800000e+02
   2.0000000e+00   4.5000000e+01   8.7000000e+01   4.8700000e+02
   7.9000000e+01   1.7200000e+02   3.2200000e+02   3.5800000e+02
   1.7100000e+02   1.8300000e+02   2.4400000e+02   4.4600000e+02
   2.9000000e+01   2.2200000e+02   2.9900000e+02   3.9200000e+02
   1.8800000e+02   2.5300000e+02   4.3100000e+02   5.0000000e+02
   6.0000000e+00   2.0400000e+02   2.3100000e+02   4.6900000e+02
   1.0000000e+01   7.8000000e+01   1.1400000e+02   2.1600000e+02
   3.7000000e+01   6.9000000e+01   2.5800000e+02   4.6100000e+02
   8.1000000e+01   1.7800000e+02   1.8400000e+02   4.5100000e+02
   6.3000000e+01   7.4000000e+01   1.1500000e+02   3.1400000e+02

#40

好的,我在外面。到家後試試。謝謝。


#41

为了不给这个论坛带来太多的噪声,接下来的学习我们可以私信讨论。


#42

我们也想看到啊~~


#43

謝謝關注。

我先說幾句題外話。

首先請大家盡量避免使用「小白」,「大佬」之類的網絡用語。雖然表明謙虛和恭敬可以理解,但是其實大家都是一樣的過來人,只不過在某些方面有的人經驗多一點,有些少一點罷了。

其次我個人認為在編程這個領域的提高要取決於以下幾個方面:

  1. 對編程環境的熟悉和理解。
  2. 對要解決的問題本身的熟悉和理解。
  3. 把具體問題轉化成數據問題,也就是說對已知數據和未知數據的熟悉和理解。
  4. 對可以利用的軟件包和原生函數的熟悉和理解,找到合適自己數據要求的函數來完成數據轉換。
  5. 在熟練以上四點的同時,根據自己的專業知識和思想,自己定義變量和函數來完成數據轉換,在反覆修改的基礎上寫出可靠的代碼。這是一個非常耗腦力的過程,不要以為「大佬」會很輕鬆地解決任何問題。

在現在以數據為核心的編程時代,抽象地比較編程能力,平台和語言的運行速度都是沒有意義的。不同的問題,不同的環境,不同的編程思想都對最後的結果有很大影響。

網上交流問答對所有人都是一個交互學習過程。我們需要從不同人的角度看「問題」,「環境」,和「思想」這三個方面。問什麼問題,怎麼問問題,怎麼回答問題,對我們大家都是一個學習過程。

我和@sailing的私信討論將會是關於他編程環境,以及需要解決問題的具體討論,所以我認為在這裡公開分享不太合適。不過以後需要的話他也許會通過其它的渠道分享他的經驗。