日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Julia常用包简介

發布時間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Julia常用包简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?第三方開發的Julia庫(包),是Julia生態中極為重要的一部分。Julia包雖然目前沒有Python那樣豐富,但卻極為快速地發展著。官方提供了包數量的統計趨勢,見下圖所示:

圖D-1 Julia包發展趨勢

由圖可見,Julia包的發展非常之快。相信在不久的將來,其豐富性及多樣性能夠覆蓋開發中的各種場景,并能夠快速滲透到科學計算等領域。讀者可在https://pkg.julialang.org/這個網站的近兩千個包中尋找適合自己的包。

下面我們將列舉一些常用包,關于它們的詳細使用方法,請參閱官方文檔。

Documenter.jl

這是一個由官方維護的包,專門用于將Julia代碼中的注釋系統(Docstrings)及其中的Markdown文件生成完整的說明文檔。

該包提供的文檔生成器,具備以下功能特點:

  • 支持Markdown語法
  • 開箱即用(Minimal Configuration)
  • 支持Julia 0.6及0.7-dev版本(截止書稿時)
  • 會對注釋中標注的代碼執行測試語句(Doctest)
  • 支持文檔章節等方面的交叉引用
  • 支持LaTeX語法
  • 文檔字符系統缺失與交叉引用錯誤的檢查
  • 自動生成目錄與文檔索引
  • 使用Git自動構建與部署文檔,并能推送到GitHub的文檔庫中

包Documenter.jl是已經注冊的包,安裝很簡單,只需執行Pkg.add("Documenter")命令即可。該包會將代碼庫的Markdown文件及代碼中以docstrings方式注釋的文檔系統解析合并為單一的內聯(inter-linked)文檔。

DataFrames.jl

在科學計算中往往需要綜合多種庫的優勢,以構造強大的應用與分析系統,一個通用的數據結構便成為整合這些不同庫的紐帶,能夠為跨庫調用帶來極大的便利,更是為生態的快速發展奠基了基礎。

在Python語言中,有一個專門用于處理行列式或表格式(tabular)數據的結構,名為DataFrame,是科學計算庫Pandas的重要組成部分,已成為很多Python第三方包支持的基本數據操作框架。

類似地,Julia語言的DataFrames庫,正是意圖建立這樣一個基礎的數據結構。通過Pkg.add(“DataFrames”)命令便可安裝該包,此后使用using DataFrames即可將該包導入到開發者的名字空間中,使用DataFrames中的各種功能。

DataFrame類型能夠表達表格式數據,并支持數據中存在缺失值。其內部是列存儲的,每列是一個向量結構。在構建DataFrame對象時,可以同時列名,例如:

julia> using DataFrames

?

julia> df = DataFrame(A = 1:4, B = ["M", "F", "F", "M"])

4×2 DataFrames.DataFrame

│ Row │ A │ B │

├───┼──┼──┤

│ 1?? │ 1 │ M │

│ 2?? │ 2 │ F │

│ 3?? │ 3 │ F │

│ 4?? │ 4 │ M │

在構造方法中,參數名即是列名,而參數值即是對應列的取值。例中的DataFrame對象有兩列:第一列名為A,取1到4的整型;第二列名為B,值是字符串類型;而列Row是默認添加的行編號。

我們可以通過一些函數查看DataFrame對象的屬性:

julia> size(df)?? # 取得DataFrame對象的行與列數

(4, 2)

?

julia> size(df,1)? # 取得對象的行數

4

?

julia> size(df,2)? # 取得對象的列數

2

也可以通過describe()函數取得基本統計信息:

julia> describe(df)

A?????????????????????????????? # 列名

Summary Stats:

Mean:?????????? 2.500000???????? # 均值

Minimum:?????? 1.000000????????? # 最小值

1st Quartile:????? 1.750000???????? # 分位數

Median:????????? 2.500000??????? # 中值

3rd Quartile:????? 3.250000???????? # 分位數

Maximum:?????? 4.000000???????? # 最大值

Length:????????? 4?????????????? # 行數

Type:??????????? Int64?????????? # 數據類型

?

B

Summary Stats:

Length:???????? 4?????????????? # 行數

Type:?????????? String?????????? # 數據類型

Number Unique:? 2?????????????? # 唯一值(去重后)的數量

當然,我們可以通過列名,提取出某列的向量:

julia> df[:A]

4-element Array{Int64,1}:

?1

?2

?3

?4

?

julia> df[:B]

4-element Array{String,1}:

?"M"

?"F"

?"F"

?"M"

需要注意的是,代碼中使用列名時,需使用Symbol類型表達。

CSV.jl

簡單的數據交換與存儲,可采用CSV格式,這是一種常用的表格式數據,而包CSV.jl專為CSV文件的讀寫提供了支持。

通過Pkg.add("CSV")后,即可使用該包。該包非常簡單,基本上就兩個操作,read()和write()函數。我們下面僅以read()函數為例,介紹該包的使用。

函數read()會從指定的文件中加載csv格式的數據,并存儲到指定的數據結構中,默認的結構為DataFrame類型,其原型為:

CSV.read(fullpath::Union{AbstractString,IO}, sink::Type{T}=DataFrame, args...; kwargs...)

CSV.read(fullpath::Union{AbstractString,IO}, sink::Data.Sink; kwargs...)

其中fullpath指定csv文件的絕對路徑,或者是已經打開的某個IO對象。其中的Data.Sink是第三方包DataStreams.jl提供的類型,可參閱相關文檔,這里以DataFrame類型為例。

假設有一個csv文件,其內容如下表,各列以英文逗號分隔:

表D-1 CSV文件示例內容

c1

c2

c3

1

7.2

abc

12

8.4

def

13

9.3

ghi

通過CSV包讀取,便可將該csv文件的內容加載到一個DataFrame對象中,即:

julia> using CSV

julia> data = CSV.read("d:/test.csv")

3×3 DataFrames.DataFrame

│ Row │ c1 │ c2? │ c3?? │

├───┼───┼──┼───┤

│ 1?? │ 11 │ 7.2 │? abc │

│ 2?? │ 12 │ 8.4 │? def │

│ 3?? │ 13 │ 9.3 │? ghi │

之后,便可基于DataFrames包的功能進行各種后續操作,例如describe()查看基本情況:

julia> describe(data)

c1

Summary Stats:

Mean:?????????? 12.000000

Minimum:??????? 11.000000

1st Quartile:?? 11.500000

Median:???????? 12.000000

3rd Quartile:?? 12.500000

Maximum:??????? 13.000000

Length:???????? 3

Type:?????????? Union{Int64, Missings.Missing}

Number Missing: 0

% Missing:????? 0.000000

?

c2

Summary Stats:

Mean:?????????? 8.300000

Minimum:??????? 7.200000

1st Quartile:?? 7.800000

Median:???????? 8.400000

3rd Quartile:?? 8.850000

Maximum:??????? 9.300000

Length:???????? 3

Type:?????????? Union{Float64, Missings.Missing}

Number Missing: 0

% Missing:????? 0.000000

?

c3

Summary Stats:

Length:???????? 3

Type:?????????? Union{Missings.Missing, String}

Number Unique:? 3???

Number Missing: 0

% Missing:????? 0.000000

從例中可見,CSV能夠自動識別出每列的數據類型.

假設上例中的數據有一個缺失值,并以N字符表示,如下表所示:

表D-2 有缺失值的CSV文件示例

c1

?c2

?c3

11

7.2

?abc

12

N

?def

13

9.3

?ghi

在讀取數據時,設置missingstring參數[[1]]為N,告知read()函數有缺失值:

julia> data = CSV.read("d:/test.csv"; missingstring="N")

3×3 DataFrames.DataFrame

│ Row │ c1 │ c2???? │ c3?? │

├───┼──┼────┼───┤

│ 1?? │ 11 │ 7.2???? │? abc │

│ 2?? │ 12 │ missing │? def │

│ 3?? │ 13 │ 9.3???? │? ghi │

可見,在獲得的DataFrame中,列c2中的缺失值得到了正確的識別。

另外,通過read()函數的鍵值參數還可以告知csv的其他各種格式情況,以便在加載數據時能夠成功處理。下面給出該函數的其他一些使用示例:

# 讀取以空白符為分隔符的文件 ?????????????????????????????????????????????????????????????????????????????????

CSV.read(file; delim=' ') ??????????????

?

# 自定義列名,適用于文件中沒有提供表頭的csv文件,但需要列名的數量與文件的列數一致

CSV.read(file; header=["col1", "col2", "col3"])

?

# 自定義每列的數據類型,但必須與實際的數據匹配

CSV.read(file; types=[Int, Int, Float64])

?

# 自定義讀取的文件行數,有助于提高解析速度,并可用于只讀取所需的有限頭部數據

CSV.read(file; rows=10000)

JSON.jl

在數據交換中,尤其是網絡數據中,Json格式的使用非常頻繁,Julia同樣提供了一個簡潔的庫,用于處理這類格式的數據。

假設有個名為s的字符串變量,存儲著Json數據,如下所示:

{

??? "a_number": 5.0,

??? "an_array": ["string", 9],

??? "inner": {

??????? "value": 3

??? }

}

在安裝JSON包后,可以嘗試將其解析到數據結構,語句非常簡單:

julia> s = "{\"a_number\" : 5.0, \"an_array\" : [\"string\", 9], \"inner\": {\"value\": 3}}";

?

julia> j = JSON.parse(s)

Dict{String,Any} with 3 entries:

? "an_array" => Any["string", 9]

? "a_number" => 5.0

? "inner"??? => Dict{String,Any}(Pair{String,Any}("value", 3))

函數parse()會將s的內容分析出來,放在一個嵌套的Dict對象中,并會自動進行數據類型識別,然后就可以通過關鍵字進行層層提取了。

julia> j["an_array"]

2-element Array{Any,1}:

? "string"

?9

?

julia> j["inner"]

Dict{String,Any} with 1 entry:

? "value" => 3

?

julia> j["inner"]["value"]

3

反之,也可以將對象結構轉換到Json字串,便于存儲或傳輸:

julia> JSON.json(j)

"{\"an_array\":[\"string\",9],\"a_number\":5.0,\"inner\":{\"value\":3}}"

Taro.jl

這是一個基于Apache Tika等庫開發的用于從Word、Excel或PDF文件中提取內容的強大的庫,其有以下幾個功能點:

  • 能夠從Word、Excel、PDF文件中提取原始的文本數據
  • 從Excel文件中將數據提取到DataFrame結構中
  • 以Julia語言讀取Excel文件的API接口函數
  • 將采用XSL-FO布局的文件轉換為PDF文件

Gadfly.jl

包Gadfly是Julia語言開發的繪圖與可視化庫,由Daniel C. Jones設計,現在由社區維護,其特點包括:

  • 相當于SVG、PNG、Postscript與PDF的圖形渲染質量
  • 直觀的、一致性的繪圖接口設計
  • 可在IJulia中使用
  • 能夠使用DataFrames.jl數據結構
  • 支持大量的繪圖類型

Gadfly采用了一種被稱為“圖形語法(grammar of graphics)”的標準進行架構的設計,其在繪圖命令(plot specification)提交后,會遵循內部的流水線進行渲染,得到最終的結果。

渲染流水線(rendering pipeline)會將繪圖命令轉為一個整體性的圖形場景,包括坐標軸、顏色等導引元素(guides),及分層的點、線等圖形元素(geometry)。每一層會包括數據源、圖形元素(簡稱圖元)、數據與圖元的關聯映射、應用于層次數據統計等部分。所有的層共享如下元素:坐標系(如笛卡爾坐標系、極坐標系等)、坐標軸的縮放(如重對數、半對數等)、圖形場景統計及導引元素等。

一套完整的的繪制命令需要描述清楚這些共享的元素及各層的規格(specifications)。完整的渲染進程如圖所示:

圖D-2 Gadfly渲染流水線框架

ECharts.jl

ECharts是一款由百度前端技術部開發的,基于Javascript的數據可視化圖表庫,提供直觀,生動,可交互,可個性化定制的數據可視化圖表。提供大量常用的數據可視化圖表,底層基于ZRender(一個全新的輕量級canvas類庫),創建了坐標系,圖例,提示,工具箱等基礎組件,并在此上構建出折線圖(區域圖)、柱狀圖(條狀圖)、散點圖(氣泡圖)、餅圖(環形圖)、K線圖、地圖、力導向布局圖以及和弦圖,同時支持任意維度的堆積和多圖表混合展現。

圖D-3 Echarts框架圖[[2]]

包ECharts.jl基于Julia語言對JavaScript的ECharts 4進行了封裝,從而能在Julia中使用這個強大的圖表庫。在Pkg.add(“ECharts”)之后,即可通過using ECharts使用該包。

例如我們要繪制一個柱狀圖:

using ECharts

x = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]

y = [11, 11, 15, 13, 12, 13, 10]

bm = bar(x, hcat(0.95 .* y, 1.25 .* y, y))

則會獲得下圖:

圖D-4 Echarts柱狀圖示例

也可以繪制金融當中常見的K線圖:

using ECharts

dt = ["2016/08/26", "2016/08/29", "2016/08/30", "2016/08/31", "2016/09/01", "2016/09/02",

"2016/09/06", "2016/09/07", "2016/09/08", "2016/09/09", "2016/09/12", "2016/09/13",

"2016/09/14", "2016/09/15", "2016/09/16", "2016/09/19", "2016/09/20", "2016/09/21",

"2016/09/22", "2016/09/23", "2016/09/26"]

?

close_ = [12.38, 12.47, 12.55, 12.60, 12.44, 12.50, 12.67, 12.70, 12.73,

12.38, 12.70, 12.38, 12.14, 12.11, 12.11, 12.11, 12.00, 12.09, 12.18,

12.17, 12.01]

?

open_ = [12.47, 12.38, 12.46, 12.48, 12.66, 12.53, 12.49, 12.62, 12.50,

12.61, 12.32, 12.53, 12.18, 12.14, 12.05, 12.12, 12.09, 12.08, 12.17,

12.12, 12.12]

?

high_ = [12.55, 12.50, 12.56, 12.61, 12.72, 12.57, 12.67, 12.75, 12.75,

12.6850, 12.77, 12.68, 12.31, 12.18, 12.13, 12.33, 12.19, 12.11, 12.29,

12.22, 12.12]

?

low_ = [12.34, 12.38, 12.43, 12.48, 12.35, 12.46, 12.43, 12.62, 12.50,

12.38, 12.28, 12.33,12.11, 12.06, 12.01, 12.0586, 11.96, 12.01, 12.16,

12.12, 12.00]

?

c = candlestick(dt, open_, close_, low_, high_)

執行獲得的圖標如下所示:

圖D-5 Echarts繪制K線圖示例

利用ECharts.jl包,可以繪制更多的圖表,讀者可以根據官方文檔獲得更多的幫助。

QML.jl

在圖像界面接口(Graphical User Interface,GUI)方面,QT是基于C++開發的跨平臺框架,支持包括Windows、Linux、Android、WP、IOS等多種系統平臺,是一個筆者非常欣賞的用C++語言開發的GUI套件,其簡潔明了的接口和框架,使用起來非常的方便,而且界面控制也非常的容易。借助QT官方提供的QT Creator工具,更能夠快速地設計出合用的交互界面。而且,QT不限于開發GUI,更適用于常見場景的應用開發,包括控制臺工具、服務器、網絡通訊等。該套件提供社區版,開發者只要遵循其協議,可免費使用。

在界面實現時,除了使用C++語言設計交互邏輯外,還可以使用一種類型JavaScript語言的名為QML的腳本語言進行界面設計,而在Julia中,包QML.jl即是通過CxxWrap.jl包提供了Qt5 QML的編程支持。

在采用Julia進行GUI編程時,還可以參看PySide.jl包、Qwt.jl包及Gtk.jl包。

JDBC.jl

數據庫的操作在Julia中也非常方便,其中的JDBC.jl包提供了數據庫訪問的支持。

該包基于JavaCall.jl包的功能,通過Java的接口訪問JDBC驅動。提供的API包括兩種核心組件,一種是訪問JDBC的直接接口,另一種是支持DataStreams.jl的Julia接口。

在使用該包前,需要安裝好對應的JDBC,并配置了正確的路徑,然后需先對JVM進行初始化,如下:

using JDBC

JDBC.usedriver("/home/me/derby/derby.jar") ??# 路徑指向驅動包

JDBC.init()????? # 或JavaCall.init()

需要注意的是,在使用該包后,需要顯式地進行資源釋放:

JDBC.destroy() ???# 或JavaCall.destroy()

另外,在https://github.com/JuliaDatabases中列出了更多關于數據庫操作的Julia包,例如SQLite.jl包、ODBC.jl包、PostgreSQL.jl包、MySQL.jl包等。

Distributions.jl

概率分布在科學計算中常常遇到,無論是樣本分析、概率表達等。包Distributions則在概率分布方面提供了很好的支持。其功能特點有:

  • 矩(包括均值、方差、 偏度、峰度等)的計算,還有熵及其他屬性
  • 概率密度函數及其對數表達
  • 矩生成函數與特征函數
  • 樣本采樣或總體采樣
  • 最大相似度估計

該包同時還支持多元統計分布、混合模型、假設檢驗及分布擬合等計算。

Distances.jl

這又是一個強大的包,提供了各種相似性度量函數的支持。所謂相似性度量,是在模式識別與機器學習中必然會用到的基礎模塊之一,用于評估兩個特征向量的距離,即相似性程度。采用何種距離函數,不論是在聚類還是在分類中,都是需要認真考慮并慎重選擇的。

該包在相似度計算的實現中,是進行了優化的,相比于粗糙地使用迭代的方式實現距離評估,有著很大的性能優勢。有興趣的,可在官方包中找到對應的Benchmark對比數據。

下面我們列出其支持的所有距離函數,在開發中可自行選擇。關于這些距離函數的具體定義,也請讀者能夠自行找些資料,仔細研究下。

表D-3 Distances支持的距離算法

中文名

英文名

歐式距離

Euclidean Distance

平方歐式距離

Squared Euclidean Distance

街區距離

Cityblock Distance

杰卡德距離

Jaccard Distance

Rogers-Tanimoto距離

Rogers-Tanimoto Distance

切比雪夫距離

Chebyshev Distance

閔可夫斯基距離

Minkowski Distance

海明距離

Hamming Distance

余弦相似度

Cosine Distance

相關系數

Correlation distance

卡方距離

Chi-square distance

KL散度

Kullback-Leibler divergence

標準化KL散度

Generalized Kullback-Leibler divergence

瑞利散度

Rényi divergence

JS散度

Jensen-Shannon divergence

馬氏距離

Mahalanobis distance

平方馬氏距離

Squared Mahalanobis distance

巴氏距離

Bhattacharyya distance

黑林格距離

Hellinger distance

半正矢距離

Haversine distance

平均絕對偏差

Mean absolute deviation

均方差

Mean squared deviation

均方根偏差

Root mean squared deviation

標準化的均方根偏差

Normalized root mean squared deviation

布雷柯蒂斯相異度

Bray-Curtis dissimilarity

另外,這些相似性度量,在包中的具體實現還會有很多的變體,有著更為豐富的選擇。筆者提醒,在使用這些距離函數時,最好能很清楚這些函數的定義方式,最為重要的一點是,這些距離函數的計算結果,是越大越表示相似,還是越小越表示相似。

TensorFlow.jl

該包是對Google開發的深度學習庫TensorFlow的封裝,只需執行

Pkg.add("TensorFlow")

即可安裝該包。若要在Linux上支持GPU加速,可設置環境變量TF_USE_GPU為1,然后重新編譯,即:

ENV["TF_USE_GPU"] = "1"

Pkg.build("TensorFlow")

該包現已支持的功能有:

  • 所有基本的一元及二元數學函數或運算符;
  • 最常用的神經網絡操作,包括卷積、GRU版的循環神經網絡及dropout等;
  • 神經網絡訓練模塊,例如AdamOptimizer等;
  • 基本的圖像加載及縮放操作;
  • 控制邏輯操作;
  • PyBoard圖可視化。

Mocha.jl

包Mocha是Julia語言實現的深度學習框架,類似于C++中的Caffe庫。Mocha高效地實現了常見的隨機梯度優化和通用層,通過無監督的自編碼器的學習方式,可用于訓練深度神經網絡(Deep Neural Networks,DNN)和卷積神經網絡(Convolutional Neural Networks,CNN)。Mocha的特點有:

  • ?模塊化的架構。Mocha有著清晰的組織結構,而且各個組件間是低耦合的(isolated)。這些模塊包括網絡層、激勵函數、優化過程、正則化函數、初始化函數等。內置的組件已足夠用于典型的DNN或CNN應用,而開發者更可在其基礎上進行類型擴展。
  • ?高層接口。借助Julia語言強大的表達能力及迅速發展的開源生態,在Mocha中使用DNN等功能會很容易、自然。可通過提供的圖像分類案例進行方便的學習。
  • ?可移植及高性能。Mocha因為基于Julia語言,故可運行于任何支持Julia語言的平臺上,而且這種移植性對于開發者來說是透明的。基于Julia語言JIT編譯器與各種內置的性能函數,可以很方便、高效地進行算法的原型設計,并能夠直接獲得性能評估。而且,在C++編譯器可用時,原生擴展后端打開后能夠比純粹的Julia后臺快2到3倍。

Mocha提供的GPU后臺使用的是NVidia?的cuDNN庫,cuBLAS庫及定制的CUDA內核,提供了高性能的計算能力。采用GPU加速后,在現代GPU設備中,特別是在大型模型中,能夠獲得20到30倍的速度提升。

  • ?兼容性。借助專用于科學數據存儲的HDF5格式,在Mocha用其存儲數據集及模型的快照,從而能夠很容易地與Matlab、Python(Numpy)及其他已存在的計算庫進行數據交換。Mocha同樣提供了從Caffe中導入訓練模型快照的工具,開發者可以充分利用不同庫的優勢。
  • ?可靠性(Correctness)。Mocha中的每個組件都經過了充分的測試,其正確性與可靠性是保證的。
  • ?開源開放。Mocha采用的MIT(Expat)許可證,其源代碼是開源的,開發者可以方便地進行學習,并可自行擴展。

若要安裝Mocha庫,只需在Julia的REPL中,運行命令:

Pkg.add("Mocha")

即可。

?


[[1]] 舊版CSV包中使用鍵值參數null指定缺失值的標識字符串,但新版中已棄用,被missingstring代替。

[[2]] 圖片來自https://www.oschina.net/p/echarts

總結

以上是生活随笔為你收集整理的Julia常用包简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。