Combinatorics / Distance / IterTools

最近程式遇到了一系列執行效能上的瓶頸,主要是被 Python 的 GIL 限制住,於是打算往 Julia 方向遷移。除了複習之前學過的基礎語法外,也嘗試:

  • 將之後的程式碼轉用 Julia 完成
  • 逐步遷移目前的研究用程式碼為 Julia
  • 暫時不能替代的部分用 pycall 呼叫

底下是這次的遷移所用到的庫。未來有學到新的庫也會做筆記以免遺忘。

Combinatorics.jl

Combinatorics 是一個排列組合計算工具。提供了各種基於 factorial 所衍生的排列組合計算公式,包括基本的 combination 及 permutation,以及諸如 partitions 等工具。

\[_nC_r=\left( \begin{array}{l} n\\r \end{array}\right)=\frac{_n P_r}{r!} = \frac{n!}{r!(n-r)!}\]

Distances.jl

因為我的專案需要計算 Hamming distance,所以參考這個組合。除了 Hamming 外,其實比對兩個高維空間座標還有很多算法,例如 Cosine distance & Euclidean distance。用法如下:

r = Euclidean()(x, y) # as type
r = euclidean(x, y) # as function

也可以應用與大規模計算,例如作為 pairwisecolwise 的輸入函數。

IterTools

官方擴展庫,與 Python 的 itertools 是類似的生成器工具。使用範例如下:

using IterTools

for i in imap(+, [1,2,3], [4,5,6])
    @show i
end