Category: Computer


Unit test in Physics?

在 CS 領域,寫程式常常會需要寫 unit test,來確保程式區塊的運作正常,這對後續維護程式碼相當方便。如果修改過後的程式碼無法通過 unit test,就代表該修改可能會不相容。由於 unit test 的範圍通常是一小段function,因此可以很快就找出有問題的 function。另外,寫 unit test 也有助於對該段程式碼的了解,如果根據你所預期的結果,對某段程式寫了 unit test 卻沒通過,代表你對該段程式碼的理解有誤,或是該段程式碼有 bug。

也許在理論物理也應該要建立這樣的 unit test,
在眾多的理論中,可以快速檢查各種新理論是否與實驗或已知現象或結論是否相符合。

廣告

有時候部分 Windows 7 的圖示,像是開始功能表列或桌面的程式圖示會消失

這是因為 Windows 有對這些程式圖示做快取,但快取資料庫可能被某些新安裝的程式弄亂了

下面方法方法可以重建圖示快取資料庫:

  1. 關閉所有的檔案總管 (Windows Explorer) 視窗
  2. 按 Ctrl + Shift + Esc 啟動 Windows 工作管理員 (Task Manager)
  3. 在「處理程序」頁面,找到 explorer.exe,在其上按右鍵
  4. 點選 「結束處理程序(E)」。 (這時工作列會消失,因為工作列就是 explorer.exe 的一部分。)
  5. 從工作管理員左上角的「檔案(F)」選單,點選「新工作 (執行…) (N)」
  6. 輸入 cmd 後按「確定」,以打開命令提示字元 (Command Prompt)
  7. 在 cmd 視窗內,依序輸入下列指令並按 Enter:
    cd /d %userprofile%\AppData\Local
    del IconCache.db /a
    exit
    (這步驟基本上刪除圖示快取檔,explorer.exe 重開後就會重建)
  8. 在工作管理員,點「檔案(F)」>「新工作 (執行…) (N)」
  9. 輸入 explorer 後按「確定」,工作列就會出現

資料來源 (英文):http://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/icons-missing-their-specialized-image/3f1f7108-2984-4071-afd8-5bec9cceda38?auth=1

最近開始使用 Spyder 的 python IDE,其中包含 editor、IPython、變數檢視器、檔案檢視器和各種 documentation,對於需要不斷改 code 並實驗各種參數非常好用。

Spyder IDE 的 Github: https://github.com/spyder-ide/spyder
Spyder 官方網站: http://pythonhosted.org/spyder/index.html

由於我沒有安裝 Anaconda,這裡提供使用 pip 安裝的方法:

Spyder IDE 需要藉由 PyQt 來顯示圖形介面,因此需先安裝 PyQt。在 cmd 輸入:

pip install PyQt5

安裝完成後,接著輸入:

pip install spyder

來安裝 Spyder。如果沒問題就安裝好了。最新的 Spyder 版本是 3.2.0,但我在安裝 Spyder 3.2.0 遇到一些 unicode 的問題,所以目前我還是安裝舊版的 3.1.4

pip install spyder==3.1.4

如果以後 bug 修復了,可以再透過下列指令更新 Spyder

pip install -U spyder

 

Windows 上安裝完後,要啟動 Spyder IDE ,可以在 cmd 輸入:

spyder3

Spyder 的程式執行檔 “spyder3.exe" 是放在 Python 安裝位置下的 Scripts 資料夾 (Python 的其他 cmd 指令像是 pip 也都在此)。如果嫌麻煩,可以建立一個捷徑連結到 “spyder3.exe"。

註:一般 Python 3 的預設安裝位置是

C:\Program Files (x86)\Python 3.x (所有使用者安裝 32 位元)
C:\Program Files      \Python 3.x (所有使用者安裝 64 位元)
C:\Users\<user name>\AppData\Local\Programs\Python\Python3x-32 (個別使用者安裝 32 位元)
C:\Users\<user name>\AppData\Local\Programs\Python\Python3x    (個別使用者安裝 64 位元)

而 Python 2 的預設安裝位置是

C:\Python2x

 

See you later alligator

今天聽到英文一種奇妙的方法說再見:

A: See you later alligator.

Urban dictionary 上寫對方聽到這句,必須要回答:

B: In a while crocodile.

搞笑的是 alligator 和 crocodile 都是鱷魚

美國人的梗真是難懂 ~~

如果使用的是 MiKTeX 2.9

可以在
C:\Program Files (x86)\MiKTeX 2.9\tex\latex\base
找到 LaTeX 的原始檔

LaTeX 一般也會包含說明檔 source2e,但我的 source2e 無法編譯,所以在網路上找到了編譯好的版本:
https://www.tug.org/texlive/Contents/live/texmf-dist/doc/latex/base/source2e.pdf

另外,你可能不會直接看到 source2e.pdf 所提到的原始檔 (例如:lt….dtx 檔),因為他們已經被包裝到 latex.ltx 和 latexa.ltx 檔內了。

第一次練習用 Python 寫 logistic regression。

Logistic regression 雖然已經有很多寫好的 package 可以用,不過我還是嘗試自己寫了一下,

讓自己熟悉 logistic regression 到底做了什麼,還有各個參數的特性。

 

Logistic regression 顧名思義就是用 logistic function:

h(z) = 1/(1 + exp(-z)).

為 fitting function 來 fit data 或說是做分類,logistic function 本人長這樣:

logistic-function

它的特性是,連續的從 0 到 1 遞增,當輸入 z < 0 時輸出 h < 0.5,當輸入 z > 0 時輸出 h > 0.5。

所以當你的 data 分布是大約以 z = 0 為分界,以上為 True (1),以下為 False (0),就可以用 logistic function fit 或分類出來。

如果分界點不剛好在 z = 0,或是 T 和 F 的區域相反,可以藉由不同的 fitting function 像是 z(x) = t_0 + t_1*x 輸入到 h(z) 來達到。

依此類推,你也可以 fit 更高維的 data,然後考慮 z(x1, x2, x3, …) = t_0 + t_1*x1 + t_2*x2 + t_3*x3 …。

或是更高次方的 fitting function,像是 z = t_0 + t_1*x + t_11*x^2 + t_111*x^3 …,等。

 

下圖的 2 維 data  點是由室友提供,藍點代表 1 (True),黃點代表 0 (False)。

可以看出來點的分布像是個歪斜的橢圓形,所以我使用一個 2 次的 function 來 fit 它:

z(x,y) = t_0 + t_1*x + t_2*y + t_11*x^2 + t_22*y^2 + t_12*x*y.

在給定 t_0 … t_12 後, 對於每一個 data 點代入 z (x, y) 再代入 logistic function, h(z), 並以 h(z) = 0.5 為分界

就可以預測每一點 (x,y) 大約是 T 或是 F

a-result

圖中紅色曲線代表 h(z) = 0.5 的曲線,就是這個 model 分類 T 和 F 的界線。

 

當然,真正 regression 的部分在於找到 model 的參數 t_0, t_1, …, t_12,讓 model 最符合 data。

對於一組參數 t_0, t_1, …, t_12,可以計算出 model 的 prediction ( h(z(x,y)) )與 實際 data 的誤差,

每一組 data 都可以算出誤差,這些誤差之合稱為 cost function (就像是高中學過的 X^2 一樣)。

Regression 的目的就是找到一組參數 t_0, t_1, …, t_12 使得 cost function 最低。

也就是說 regression 就是一個找最小值的問題。

 

要找到一個 function 的最小值,最簡單的般法就是 gradient descent。

先計算 cost function 在該點的梯度,然後讓參數 t_0, t_1, …, t_12, 往 cost function 減少最快的方向前進一段距離。

再重新計算梯度,再前進。

重複夠多次之後,就會逼近最小值,找到 model 的參數。

 

上圖為 gradient descent 前進 1000 次的結果,

可以看的出來,還不是 fit 得很好,因為我使用的方法相當簡單,每次前進的步伐是固定的

較為進階的演算法,會每一步調整最佳的前近距離,收斂的就會更快更有效率。

 

總之,logistic regression 是個相當有趣的 python 練習,另外也是做 data scientist 和 neural network 的第一步。

 

My code and data: http://github.com/louis925/Logistic-Regression-Oval

Coursera 上關於 Machine Learning 的線上開放課程 (由 Stanford University 教授上課): http://www.coursera.org/learn/machine-learning/home/welcome

Numpy 是 Python 中處理數學相關的一個強大 package,要使用 Numpy 前請先安裝 Python。(可以到 Python 官網 下載安裝,目前最新版本是 3.6.2 和 2.7.13。) 而 Scipy package 依賴於 Numpy ,以提供更多科學運算所需的功能。

一般 Python 安裝 packages 可以直接在 command line (cmd) 裡輸入

pip install <package 名稱>

來下載安裝。

然而 Scipy (於 2017 年) 在 pip 上仍然沒有相容於 Windows 的安裝版本,因此必須手動至 Christoph Gohlke 的網站下載安裝。由於此 Scipy 依賴於 Numpy+mkl,所以 Numpy package 也必須手動安裝。

下面提供在 Windows 上已安裝好 Python 後,手動下載安裝 Numpy package 的方法

  1. 開啟命令提示字元 (cmd)
  2. 輸入並執行 python -m pip install -U pip setuptools
    (如果命令提示字元不認得 ‘python’ 和 ‘pip’,請先把 python 資料夾 C:\Python27 和 C:\Python27\Scripts 加入到 Windows 的 path 環境變數內)
    (此例子以 python 2.7 版,3.6 版也是類似,只是位置不同)
    (如果 pip 無法更新,請試試看重新安裝新版的 Python 2.7 或 3.6)
  3. 輸入並執行 python -m pip install wheel ,來安裝 Wheel
  4. Unofficial Windows Binaries for Python Extension Packages 網站,下載  NumPy 及 Scipy 的 Wheel 安裝 package (.whl 檔),此網站由 UCI Laboratory for Fluorescence Dynamics 的 Christoph Gohlke 所維護
    Numpy: http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
    Scipy: http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy
    依 Python 安裝的版本做選擇。(cp27 是給 2.7 版的 Python,cp36 是給 3.6 版。win32 是給 32 位元的 Python,win_amd64 是給 64 位元的。例如:2.7 版 32 位元的 Python,就下載 “numpy-1.12.0+mkl-cp27-cp27m-win32.whl" 及 “scipy-0.19.1-cp27-cp27m-win32.whl")
  5. 到剛剛下載的資料夾內,啟動命令提示字元 (檔案總管,在該資料夾空白處,按 shift + 右鍵 > 在此處開啟命令視窗(W))
  6. 先安裝 Numpy,執行 pip install numpy-1.12.0+mkl-cp27-cp27m-win32.whl
  7. 接著安裝 Scipy,執行 pip install scipy-0.19.1-cp27-cp27m-win32.whl
  8. 安裝完成後,到 Python IDLE,執行看看 import numpy 和 import scipy,如果沒有出現問題就是安裝成功了!

其他常見的 packages 如 sklearn, tensorflow, matplotlib 皆可以直接透過 pip install 安裝,並相容此 numpy

But, 以上是 the hard way to install。如果你只想要無腦安裝直接使用,可以試試 Anaconda Distribution 的 Python

http://www.continuum.io/downloads

這是由 Continuum Analytics 公司提供的,一般使用應該是免費,預設會安裝一些 data 分析和科學運算常用的 packages。

Mathematica 10 似乎有個 bug

安裝 Mathematica 10 並使用一陣子之後,就會發生在開新的 Notebook 並鍵入任意兩個字元後,Mathematica 就 Lag 一陣子

這狀況會隨著使用的時間越長,持續惡化

原因似乎是 Autocomplete 的 bug

Windows 7 下的解決辦法是到下列目錄

C:\Users\[Your User Name]\AppData\Roaming\Mathematica\SystemFiles\FrontEnd\SystemResources\FunctionalFrequency\

把 CodeAssistHistory10.*.m 開頭為檔名的紀錄檔刪掉。

這檔案不會影響 Mathematica 的運作

mathematica-10-bug-file

通常發生問題的時候,這個檔案都會有數 100 MB 大。

References:

http://mathematica.stackexchange.com/questions/120803/mathematica-10-4-freezing-after-typing-in-new-notebook?noredirect=1&lq=1

http://mathematica.stackexchange.com/questions/109005/segmentation-fault-on-auto-complete

Windows 7 SP1 在某次更新之後或全新安裝的情況下,

會發生 Windows Update 在檢查更新時,CPU 使用量會非常高,且掃描更新時間過長或卡住的狀況。

下面提供解決辦法:

  1. 關閉 Windows Update 服務 (若不關閉,更新包有可能無法安裝)
    (控制台 > 系統及安全性 > Windows Updates > 變更設定 > 選 “永遠不檢查更新",後按確定。)
  2. 重新開機
  3. 手動下載並安裝 Windows 7 和 Windows Server 2008 R2 的 2015 四月更新包 (KB3020369)
    1. 32 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=46827
    2. 64 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=46817
  4. 手動下載並安裝 Windows 7 和 Windows Server 2008 R2 的 2016 七月更新包 (KB3172605)
    1. 32 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=53335
    2. 64 位元 http://www.microsoft.com/zh-TW/download/details.aspx?id=53332
  5. 重開機後,恢復 Windows Update 服務並檢查更新

資料來源 (英文):

http://superuser.com/questions/951960/windows-7-sp1-windows-update-stuck-checking-for-updates
http://support.microsoft.com/en-us/kb/3200747

相關資料 (英文):

April 2015 servicing stack update for Windows 7 and Windows Server 2008 R2 – http://support.microsoft.com/en-us/kb/3020369
July 2016 update rollup for Windows 7 SP1 and Windows Server 2008 R2 SP1 – http://support.microsoft.com/en-us/kb/3172605

這問題也困擾我一年多了。但不知為何,這些消息都只有英文的網頁,台灣微軟都沒有翻譯這些問題和解決方案,因此只好幫他們翻譯一下。

據說這是因為舊版 Windows Update 使用 AddSupersedenceInfoIfNeeded 方法,非常之慢。更新之後會快許多。

LaTeX 測試

原來 WordPress 上可以打 LaTeX 的方程式啊!

\left(\boxempty+m^{2}\right)\phi=0