1. Julia 语言简介

1.1 关于Julia

Julia语言是高性能、动态编译的高级计算机语言。它具有极强的灵活性,适合于解决数值和科学计算问题,拥有与传统的静态型语言相媲美的执行速度。Julia语言的开发目的是创建一个功能强大、易用性好和高效的单一语言环境。

Julia语言创始人为若干精通科学计算的编程人员,其源代码以及各种平台的可执行文件及专业编译器Juno可在 http://julialang.org 网站下载。Julia语言可以通过基于网页的Jupyter (IJulia) 交互环境执行,方便在教学等情景下展示执行结果。

作为新的高性能、编译型、动态交互式的高级编程语言,Julia集中了许多计算机语言的优点。

它拥有类似于C语言一样的执行速度,拥有如同Ruby语言的动态性,又有Matlab般熟悉的数学记号和线性代数运算能力,兼具像Python般的通用性,又像R语言一样擅长于统计分析,并有Perl般处理字符串的能力和shell等胶水语言的特点,并易于学习

使用七种标准检查程序,Julia语言的运行速度接近于C及Fortran语言,但其编写数值计算程序的速度却快得多。一般情况下,Julia语言运行的数值计算程序时的速度也接近于C++,是R语言速度的100倍,Matlab语言的1000倍。

1.2 Julia 语言的下载与安装

IJulia是整合IPython前端和Julia语言的交互式网页编程环境,允许用户通过Jupyter或IPython的强大图形界面使用Julia语言。用户可在一个文件中同时使用代码、格式化文本、数学公式和多媒体。IJulia文件也可加载NBInclude包单独运行。

Pkg.add("IJulia")

Pkg.build("IJulia")

可以使用两种方式启动IJulia:

using IJulia

notebook()

jupyter notebook

2. Julia语言基础

Julia语言中单行注释只需要一个”#”,多行注释只需要以”#=”开始“#=”结束。

2.1 变量、矩阵及向量

二维数组以分号分隔维度。

matrix = [1 2; 3 4]

2×2 Array{Int64,2}:

1 2

3 4

X = [1 2

3 4]

X'X # X矩阵转置后乘X

2×2 Array{Int64,2}:

10 14

14 20

数组存储一列值,index从1开始

a = Int64[]

0-element Array{Int64,1}

一维数组可以以逗号分隔值的方式声明

b = [4, 5, 6]

3-element Array{Int64,1}:

4

5

6

输出包含3个Int64类型元素的数组: [4, 5, 6]

b[1]

4

用end可以直接取到最后索引,可用作任何索引表达式

b[end]

6

使用push!和append!往数组末尾添加元素

push!(a, 1)

1-element Array{Int64,1}:

1

push!(a, 2)

2-element Array{Int64,1}:

1

2

用pop弹出末尾元素

pop!(b)

6

以叹号结尾的函数名表示它会改变参数的值

arr = [5, 4, 6]

3-element Array{Int64,1}:

5

4

6

sort(arr)

3-element Array{Int64,1}:

4

5

6

sort!(arr)

3-element Array{Int64,1}:

4

5

6

arr现在变成了[4, 5, 6]

arr

3-element Array{Int64,1}:

4

5

6

可以用range初始化数组

a = collect(1: 5)

5-element Array{Int64,1}:

1

2

3

4

5

用length获得数组长度

length(a)

5

可以将tuples元素分别赋给变量

a, b, c = (1, 2, 3)

(1, 2, 3)

现在 $a=1, b=2, c=3$

字典用Dict生成

empty_dict = Dict()

Dict{Any,Any} with 0 entries

也可以用字符串创建字典

filled_dict = Dict("one"=>1, "two"=>2, "three"=>3)

Dict{String,Int64} with 3 entries:

"two" => 2

"one" => 1

"three" => 3

使用get(dictionary, key, defalt_value)可以提供默认值来避免异常

get(filled_dict, "one", 4)

1

类似Matlab构造矩阵

ones(2,3)

2×3 Array{Float64,2}:

1.0 1.0 1.0

1.0 1.0 1.0

$2\times 3$维的随机矩阵,保留两位有效数字

A = round(randn(2,3), 2)

2×3 Array{Float64,2}:

0.28 1.0 -0.93

-0.37 1.85 0.63

改变矩阵元素

A[1,2] = 1000

1000

M = Array(Float64, 2, 3) #未初始化的矩阵

2×3 Array{Float64,2}:

2.30147e-314 0.0 2.30002e-314

0.0 2.30138e-314 0.0

fill!(M, 3.0) #矩阵M填补元素

2×3 Array{Float64,2}:

3.0 3.0 3.0

3.0 3.0 3.0

I = eye(3) #单位针

3×3 Array{Float64,2}:

1.0 0.0 0.0

0.0 1.0 0.0

0.0 0.0 1.0

M2 = vcat(M,I) #垂直合并矩阵

5×3 Array{Float64,2}:

3.0 3.0 3.0

3.0 3.0 3.0

1.0 0.0 0.0

0.0 1.0 0.0

0.0 0.0 1.0

M2 = reshape(M2, 3, 5) #重新制定矩阵形状

3×5 Array{Float64,2}:

3.0 0.0 3.0 0.0 0.0

3.0 0.0 0.0 3.0 0.0

1.0 3.0 1.0 3.0 1.0

M3 = copy(M2) #复制矩阵

3×5 Array{Float64,2}:

3.0 0.0 3.0 0.0 0.0

3.0 0.0 0.0 3.0 0.0

1.0 3.0 1.0 3.0 1.0

M3[2:end,[1,3]] #子矩阵

2×2 Array{Float64,2}:

3.0 0.0

1.0 1.0

x = [1:3;]

s = [x[i]^2+1 for i=1:length(x)] #类似python构造矩阵

3-element Array{Int64,1}:

2

5

10

a = [1, 2, 3]

a.*a #矩阵元素级操作

3-element Array{Int64,1}:

1

4

9

m = [1, 2, 3]

println(repmat(m, 2, 3)) #水平方向重复矩阵构建新矩阵

println(repeat(m, inner=[2,3])) #垂直方向重复矩阵构建新矩阵

[1 1 1; 2 2 2; 3 3 3; 1 1 1; 2 2 2; 3 3 3]

[1 1 1; 1 1 1; 2 2 2; 2 2 2; 3 3 3; 3 3 3]

a = [10.0 1.0]

b = [0.1 0.2; 0.3 0.4]

broadcast(+,a,b) #矩阵广播操作

2×2 Array{Float64,2}:

10.1 1.2

10.3 1.4

spzeros(2,3) #稀疏矩阵

2×3 SparseMatrixCSC{Float64,Int64} with 0 stored entries

S = speye(2,3) #单位稀疏矩阵

2×3 SparseMatrixCSC{Float64,Int64} with 2 stored entries:

[1, 1] = 1.0

[2, 2] = 1.0

findnz(S) #稀疏矩阵的指数和元素

([1, 2], [1, 2], [1.0, 1.0])

D=full(S) #稀疏矩阵转变为满矩阵

2×3 Array{Float64,2}:

1.0 0.0 0.0

0.0 1.0 0.0

X = [1 2; 3 4]

kron(X,X) #矩阵的Kronecker乘法

4×4 Array{Int64,2}:

1 2 2 4

3 4 6 8

3 6 4 8

9 12 12 16

y = [3,10]

X'X\X'y #解方程组

2-element Array{Float64,1}:

4.0

-0.5

rank(X) #矩阵的秩

2

println(trues(2,3)) #Bool型矩阵

Bool[true true true; true true true]

isposdef(X'X) #判断矩阵是否正定

true

eig(X'X) #广义矩阵特征值和广义特征向量

([0.133931, 29.8661], [-0.817416 0.576048; 0.576048 0.817416])

chol(X'X) #矩阵Cholesky分解

2×2 UpperTriangular{Float64,Array{Float64,2}}:

3.16228 4.42719

⋅ 0.632456

a = [1 4 5

5 5 1

2 2 4]

sortrows(a, by=x->(x[2],x[1]), rev=true) #依矩阵 第二列元素进行排序

3×3 Array{Int64,2}:

5 5 1

1 4 5

2 2 4

a = [3, 7, 9]

find(x->x>4, a) #查找矩阵a中大于4的元素

2-element Array{Int64,1}:

2

3

2.2 函数

用关键字function和end可创建一个新函数

function change1(y)

y = y + [2, 2, 2]

println(y)

end

function change2(y)

y = y + [1, 2, 3]

println(y)

end

function change3(y)

y[1] = y[1]

println(y)

end

change3 (generic function with 1 method)

d = [1, 2, 3]

change1(d)

change2(d)

change3(d)

[3, 4, 5]

[2, 4, 6]

[1, 2, 3]

可以定义接受可变长参数的函数

function varargs(args...)

return args

# 关键字 return 可在函数内部任何地方返回

end

varargs (generic function with 1 method)

varargs(1,2,3)

(1, 2, 3)

定义可选参数的函数

function defaults(a, b, x=5, y=6)

return "$a $b and $x $y"

end

defaults (generic function with 3 methods)

defaults('h', 'g')

"h g and 5 6"

2.3 控制流

if语句,用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行

var = 5

if var > 10

println("var is totally bigger than 10.")

elseif var < 10

println("var is smaller than 10.")

else

println("var is indeed 10.")

end

var is smaller than 10.

for循环, Iterable类型包括Range,Array,Set,Dictionary,以及String

for animal = ["dog", "cat", "mouse"]

println("$animal is a mammal.")

end

dog is a mammal.

cat is a mammal.

mouse is a mammal.

x = 0

while x < 4

println(x)

x += 1

end

0

1

2

3

2.4 类型

用户可以用typeof函数来获得值的类型

typeof(5)

Int64

用户还可以自定义类型,用type和end关键字定义新的类型

type Tiger

taillength::Float64

coatcolor #不带类型标注相当于Any类型

end

tigger = Tiger(3.6, "orange")

Tiger(3.6, "orange")

抽象类型不能被实例化,但是可以有子类型

type Lion <: tiger lion>

mane_color

roar::String

end

Julia语言全面支持面向对象编程的基本特征,如继承性,多态性等。

3. 学习资源

julia常用矩阵函数_Julia语言入门相关推荐

  1. julia常用矩阵函数_Julia语言中矩阵常用操作

    1.1 矩阵的生成 生成一个4行4列的矩阵, 这里使用1~16数字. 注意, 这里生成矩阵时, 需要首先定义一个空的数组, 然后再进行填充. mat = Array(Int32,4,4) 4×4 Ar ...

  2. julia常用矩阵函数_Julia系列教程3 数学运算 矩阵运算

    数学运算https://www.zhihu.com/video/1113554595376295936 数学运算 比Matlab更直观的数学表达方式 x = 10 2x >>20 但这就导 ...

  3. R语言入门——常用函数50个

    R语言函数入门50个基本函数 0引言 1.入门准备操作及函数 1.1R版本介绍以及IDE的选择 1.2IDE及其常用的快捷键 2.空间操作以及纠错函数 2.1 ? .??.help.demo.exam ...

  4. Julia教程:Julia语言入门

    正如我在" 朱莉娅是什么? ", Julia是一种用于数值计算的免费开源高级,高性能动态编程语言,它将动态语言的开发便利性与已编译的静态类型语言的性能相结合. 它设计用于科学计算, ...

  5. 500+门java,python,js等常用语言入门,学习,实战,项目资料领取

    500+门java,python,js等常用语言入门,学习,实战,项目资料,提升自己

  6. 写一篇C语言入门第一讲

     嗨~大家好~  我是小白,最近才使用这个博客,我是一个计算机系的学生,我会在这里发一些我给我们班其他同学讲C语言入门的博文,希望大家能共享这些资料,当然了,我也很希望大家给我提出好的意见或建议.(P ...

  7. C#forUnity快速入门(连载2)-C#语言入门

     C# for Unity 编程语言快速入门教程(连载2)---C#语言入门 接上篇内容,我们把更多的C#语言入门级编程习题发布如下,希望能够对C#编程小白提高技能有帮助. 三:  学习循环语句(续) ...

  8. VML编程之------VML语言入门《VML极道教程》原著:沐缘华

    <VML极道教程>原著:沐缘华 1章4节:VML语言入门 1:VML语言入门 - 极道学法 在我正式开始讲解.你正式开始学习VML语言以前,请务必遵循以下规则,可以达到最佳效果.极道学习方 ...

  9. r语言x c(-1 -2),【软件】R语言入门之向量

    "R语言入门开篇,向量(vector)相关知识的介绍" R语言是一款优秀统计学编程语言,本文介绍R语言的几个重要命令,以及R语言中非常重要的一种数据结构-向量(Vector)的相关 ...

  10. 《Go语言圣经》学习笔记 第一章 Go语言入门

    Go语言圣经学习笔记 第一章 Go语言入门 目录 Hello, World 命令行参数 查找重复的行 GIF动画 获取URL 并发获取多个URL Web服务 本章要点 注:学习<Go语言圣经&g ...

最新文章

  1. PyTorch 笔记(19)— Tensor 用 GPU 加速
  2. 【大连】2021年下半年软考报考时间及通知
  3. 读《分布式一致性原理》JAVA客户端API操作3
  4. mysql rpm conflict_解决centos7 yum安装MySQL rpm包出现conflict problem
  5. 2017双11技术揭秘—分布式缓存服务Tair的热点数据散列机制
  6. 学习难吗?从画一个点开始,从点点鼠标开始
  7. 【译】响应式CSS动画
  8. anaconda安装第三方库两种方式
  9. 根据缺口的模式选股买股票,python 学习代码
  10. STM32-StdPeriph函数库使用的预备知识
  11. 列车停站方案_浅谈地铁列车停站方案.doc
  12. 一位优秀的学弟,计算机2019保研经历分享(北大信科、清华计算机系)
  13. Git版本控制管理——储藏和引用日志
  14. apkmirror_how to download your app from apkmirror to get the lastest app version
  15. 单点登录SSO----JSON Web Token(JWT)机制
  16. TCPUDP压力测试工具
  17. Windows10系统自带中文输入法繁体改为简体
  18. windows计划任务定时任务
  19. 算力大革命 智能经济新时代
  20. 推荐一些好用的APP

热门文章

  1. SVN 忽略不需要提交的文件
  2. 27000系列标准族谱
  3. CaysnPrinter - Windows平台开发包打印示例程序及接口说明文档 - 20170710
  4. weblogic安装部署
  5. 使用SoftEther 上免费校园网(ipv6)
  6. Nginx(五)------搭建静态资源服务器
  7. 全球及中国直流调速器行业市场调研及未来发展趋势预测报告2022-2027年
  8. C#/VB.NET 合并PDF页面
  9. crt测试显示器软件,MonitorTest(显示器性能测试软件)
  10. 服务器CRT显示不全,CRT显示器显示画面不正常常见原因揭密