Julia 介绍

Julia 是一种高性能、动态类型、功能丰富的编程语言。它由 MIT 计算机科学与人工智能实验室的 Jeff Bezanson、Stefan Karpinski、Viral Shah 和 Alan Edelman 等人开发。
我们可以从一段截取自开发成员的博客中看到其为什么出现,以及为什么贪婪
我们想要的是一个自由开源的语言,并且它同时拥有C的速度和Ruby的动态性;我们想要一个具有同像性(可以将语言的脚本本身当作数据进行处理)的语言,它有着真正的和lisp一样的宏,但是却像Matlab一样有着显然的,类似于数学表达式的标记;我们想要一个既可以像Python一样作为通用编程语言的工具,又可以像R那样适用于统计分析,能像Perl那样自然地处理字符串,能像Matlab那样给力地处理矩阵运算,它还要能像shell一样作为胶水将各种程序粘合在一起;我们想要一个简单易学的语言,同时它还能让最苛刻的魔法师们(hackers)开心。我们希望它是交互式的,但我们也希望它能被编译。
我们刚刚有提它要和C一样快嘛?!)
来自:https://julialang.org/blog/2012/02/why-we-created-julia-zh_CN/
以下是 Julia 语言的一些特点:
高性能
Julia 的设计目标之一是高性能。它的代码可以比许多其他语言更快地执行,因为它使用了即时编译技术和 Just-In-Time (JIT) 编译器。
动态类型
与许多其他语言不同,Julia 是一种动态类型语言。这意味着变量的类型是在运行时确定的,而不是在编译时确定的。这样可以提供更大的灵活性和更少的代码量。
多重派发
Julia 采用多重派发(Multiple Dispatch)的方式处理函数调用,这意味着可以根据参数的类型和数量决定使用哪个函数版本。这使得编写函数更加直观和灵活,并可以提供更高的性能。
内置类型
Julia 内置了许多常见的数据类型,如数组、元组和字典。这些类型在 Julia 中被高度优化,可以在处理大量数据时提供高效的性能。
可扩展性
Julia 的设计允许用户轻松地编写和使用自己的模块和包。这使得 Julia 在科学计算和数据分析等领域非常受欢迎。
看起来那么牛,让我们简单体验一下:
快速入门:如何使用julia编写一个helloword
安装部分,直接在官网下安装包,安装即可。 Julia 官网: https://julialang.org/
用记事本或编辑器中输入以下代码:
println("Hello World!")
将代码保存为一个.jl文件(例如,hello_world.jl)。
命令行中执行julia,打开Julia REPL(Read-Eval-Print Loop)。
在Julia REPL中,使用cd命令切换到保存Hello World代码的目录。
julia> cd("path/to/directory")
输入以下命令来运行Hello World程序:
julia> include("hello_world.jl")
程序将输出 "Hello World!"。
Julia擅长领域
Julia语言擅长以下领域:
数值计算
数据科学
机器学习
高性能计算
示例代码
以下是Julia语言在这些领域中的示例代码:
数值计算
矩阵计算
using LinearAlgebraA = [1 2 3; 4 5 6; 7 8 9]B = [9 8 7; 6 5 4; 3 2 1]C = A * B
积分计算
安装 QuadGK 库,在Julia命令行中执行:
import Pkg; Pkg.add("QuadGK")
进行积分计算:
using QuadGKf(x) = x^2result, error = quadgk(f, 0, 1)
数据科学
数据处理
安装 DataFrames 库,在Julia命令行中执行:
import Pkg; Pkg.add("DataFrames")
进行数据处理:
using DataFramesdf = DataFrame(a = [1, 2, 3], b = ["a", "b", "c"])select!(df, Not(:a)) # 删除列a
数据可视化
安装 Plots 库,在Julia命令行中执行:
import Pkg; Pkg.add("Plots")
进行数据可视化:
using Plotsx = 1:10y = rand(10)plot(x, y, seriestype = :scatter)
机器学习: 线性回归
安装 GLM 库,在Julia命令行中执行:
import Pkg; Pkg.add("GLM")
线性回归计算:
using GLM, RandomRandom.seed!(123)x = rand(100)y = 3x .+ 2 .+ randn(100)df = DataFrame(x=x, y=y)model = lm(@formula(y ~ x), df)coef(model)
高性能计算: 多线程计算
using Base.Threadsnthreads() # 查看线程数function work() tid = threadid() println("Start working on thread $tid") sleep(rand()) println("Finish working on thread $tid")end@threads for i in 1:10 work()end
上面我们介绍了它的主要应用场景,接下来我们通过一个实际案例来看一下它在处理excel数据表的方法
如何用Julia处理excel数据表?
要在Julia中处理Excel数据表,可以使用第三方包XLSX.jl。以下是使用XLSX.jl进行Excel数据表处理的示例代码:
安装XLSX.jl包
using PkgPkg.add("XLSX")
加载XLSX.jl包
using XLSX
读取Excel数据表
filepath = "data.xlsx" # Excel数据表的路径sheetname = "Sheet1" # 工作表的名称# 读取Excel数据表中的第一个工作表data = XLSX.readdata(filepath, sheetname)
处理Excel数据表
# 遍历Excel数据表中的行for row in data # 访问每个单元格的值 println(row[1], ", ", row[2], ", ", row[3])end# 提取Excel数据表中的列column1 = data[:, 1] # 提取第一列column2 = data[:, 2] # 提取第二列column3 = data[:, 3] # 提取第三列# 在Excel数据表中查找行row_index = findfirst(data[:, 1] .== "Value1")if row_index != nothing row = data[row_index, :]end# 在Excel数据表中添加新行new_row = ["Value4", 4, "Four"]push!(data, new_row)# 在Excel数据表中更新单元格的值data[2, 2] = "NewValue"
将Excel数据表保存到文件
XLSX.writetable("new_data.xlsx", sheetname, data)
请注意,XLSX.jl包还提供了许多其他的读写Excel数据表的方法。详细信息请参见XLSX.jl的文档(https://felipenoris.github.io/XLSX.jl/stable/)
处理csv表,也是类似的
首先输入using Pkg; Pkg.add("CSV")来安装CSV.jl包
读取CSV文件
可以使用以下代码读取该文件并将其转换为DataFrame:
using CSV, DataFramesdf = CSV.read("data.csv", DataFrame)
该代码将读取CSV文件并将其转换为DataFrame类型。这里需要导入DataFrames.jl以使用DataFrame类型
写入CSV文件
可以使用以下代码将DataFrame写入CSV文件:
CSV.write("data_out.csv", df)
该代码将DataFrame写入名为data_out.csv的CSV文件中。
备注
Julia 官网: https://julialang.org/