科学计算语言Julia及MWORKS实践 课件 9-数组_第1页
科学计算语言Julia及MWORKS实践 课件 9-数组_第2页
科学计算语言Julia及MWORKS实践 课件 9-数组_第3页
科学计算语言Julia及MWORKS实践 课件 9-数组_第4页
科学计算语言Julia及MWORKS实践 课件 9-数组_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

二、Julia语言基础语法2.1基本数据类型2.2数组2.3集合容器2.4数学运算和初等函数2.5

流程控制2.2、数组数组是一种容器,它显著特点包括:数组是可变的对象;同一个数组中的所有元素值都必须有着相同的类型;数组可以是多维的。Julia支持多维数组:1维数组:向量,如:2维数组:矩阵,如:……n维数组2.2、数组2.2.1数组构造与类型程序运行结果:julia>AAny[]julia>B1×5Matrix{Int64}:12345julia>C5-elementVector{Int64}:12345julia>D5-elementVector{Int64}:12345julia>E4×4Matrix{Int64}:12345678910111213141516例如:创建空数组、行向量、列向量和4×4数组。A=[]B=[1

2

3

4

5]C=[1,2,3,4,5]D=[1;2;3;4;5]E=[1

2

3

4;5

6

7

8;9

10

11

12;13

14

15

16]Julia中一般使用“[]”、“,”、空格和“;”来创建数组。数组中同一行的元素使用空格进行分隔,不同行之间用逗号或者分号进行分隔。2.2、数组2.2.1数组构造与类型常用的数组构造与类型函数julia>a=Array{Float64}(undef,2,1)2×1Matrix{Float64}:5.4e-3230.0julia>b=Matrix(I,2,3)2×3Matrix{Bool}:100010julia>c=trues(1,3)1×3BitMatrix:111julia>d=rand(1,3)1×3Matrix{Float64}:0.4835020.4918620.613609julia>e=range(1,3,3)1.0:1.0:3.0julia>f=range(1,step=1,length=2)1:1:2julia>[f;]#还可以使用[f…]2-elementVector{Int64}:12说明:T为数据类型dims为数组维度函数描述Array{T}(undef,dims)一个没有初始化的密集ArrayMatrix{T}(I,m,n)m行n列的单位矩阵zeros(T,dims)每个元素均为0的Arrayones(T,dims)每个元素均为1的Arraytrues(dims)每个元素均为true的BitArrayfalse(dims)每个元素均为true的BitArrayrand(T,dims)一个随机Array,元素值是[0,1)半开区间中均匀分布且服从一阶独立分布randn(T,dims)一个随机Array,元素为标准正态分布,服从独立同分布range(start,stop=stop,length=n)从start到stop的带有n个线性间隔元素的范围fill(x,dims)一个被值x填充的Array2.2、数组2.2.1数组构造与类型常用的数组构造与类型函数julia>a=[1,1,1];b=fill!(Vector{Vector{Int}}(undef,3),a)3-elementVector{Vector{Int64}}:[1,1,1][1,1,1][1,1,1]julia>c=reshape(a,1,3)1×3Matrix{Int64}:111julia>reinterpret(Bool,0xff)truejulia>reinterpret(Bool,0x00)false函数描述fill!(A,x)用值x填充数组Areshape(A,dims)一个包含跟A相同数据但维度不同的数组copy(A)拷贝Asimilar(A,T,dims)一个与A具有相同类型(密集、稀疏等)的未初始化数组,但具有制定的元素类型和维度,T和dims可缺省reinterpret(T,A)与A具有相同二进制数据的数组,但元素类型为T2.2、数组2.2.2数组的基础函数函数描述ndims数组维度数目size数组大小length返回集合元素数量eltype返回数组或其他对象中元素的数据类型eachindex一个返回A中每个位置的高效迭代器stride返回对象相邻指定粒度单位的距离accumulate沿A的维度做累计op运算并返回结果repeat数组重复副本rotl90将数组逆时针旋转90度rotr90将数组顺时针旋转90度eachrow创建一个迭代向量或矩阵的行的生成器eachcol创建一个迭代向量或矩阵的列的生成器eachslice获得对象在指定维度的切片broadcast广播函数以下对一些具有代表性的数组操作基础函数进行介绍。程序运行结果:julia>array2d=[[1,2,3,4][5,6,7,8][9,10,11,12][13,14,15,16][17,18,19,20]]#构造二维数组4×5Matrix{Int64}:1591317261014183711151948121620julia>size(array2d)#返回数组array2d的大小(4,5)julia>size(array2d,2)#返回数组array2d第2维度的大小5Julia>eltype(array2d),ndims(array2d),length(array2d)(Int64,2,20)#返回数组的数据类型信息,维度数目,元素数量例如:计算数组A的维数、长度、第2维度长度、元素数量以及数据类型。获取数组基本信息2.2、数组2.2.2数组的基础函数数组中每个元素的位置程序运行结果:1234例如:利用eachindex()函数获得数组A对象的索引。程序:A=[10

20

30

40];#返回A中每个位置的高效迭代器foriineachindex(A)

println(i)end沿数组A的维度做累计运算例如:利用accumulate()函数对数组指定维度做迭代计算。程序:julia>X=accumulate(+,[1,2,3])#沿维度做加法运算3-elementVector{Int64}:136julia>X=accumulate(+,[1,2,3];init=100)3-elementVector{Int64}:101103106#init参数用于指定迭代计算的起始状态2.2、数组2.2.2数组的基础函数数组中每个元素的位置程序运行结果:1234例如:利用eachindex()函数获得数组A对象的索引。程序:A=[10

20

30

40];#返回A中每个位置的高效迭代器foriineachindex(A)

println(i)end沿数组A的维度做累计运算例如:利用accumulate()函数对数组指定维度做迭代计算。程序:julia>X=accumulate(+,[1,2,3])#沿维度做加法运算3-elementVector{Int64}:136julia>X=accumulate(+,[1,2,3];init=100)3-elementVector{Int64}:101103106#init参数用于指定迭代计算的起始状态2.2、数组2.2.2数组的基础函数将数组顺时针或逆时针旋转90度julia>A=[12345]1×5Matrix{Int64}:12345julia>rotl90(A)5×1Matrix{Int64}:54321julia>B=[123;456]2×3Matrix{Int64}:123456julia>rotl90(B)3×2Matrix{Int64}:362514例如:将一维数组A和二维数组B逆时针旋转90度。广播函数例如:利用broadcast()函数对数组进行广播操作。julia>broadcast(abs,[-1,0,-12,-9.1])#对数组元素值取绝对值4-elementVector{Float64}:1.00.012.09.1

julia>broadcast(+,1.0,[-1,0,-12,-9.1])#广播指定元组中元素与1.0相加4-elementVector{Float64}:0.01.0-11.0-8.12.2、数组2.2.3索引与链接数组拼接函数julia>a=[1,2];b=[2,3];c=cat(a,b,dims=2)2×2Matrix{Int64}:1223julia>a=[1,2];b=[2,3];d=vcat(a,b)4-elementVector{Int64}:1223julia>hvcat(1,1,2)2×1Matrix{Int64}:12julia>hvcat((2,2),1,2,3,4)2×2Matrix{Int64}:1234julia>hvncat(2,3,4,5)1×3Matrix{Int64}:345说明:语法与函数拼接等价cat(A,B,dims=1)等价于vcat(A,B)cat(A,B,dims=2)等价于hcat(A,B)rows为每行元素个数或数组维度的元组语法函数描述cat(A,B,dims=k)沿着第k维拼接数组[A;B;C;…]vcat(A,B,C,…)纵向拼接[ABC…]hcat(A,B,C,…)横向拼接[AB;CD;…]hvcat(rows,A,B,C,D)同时沿垂直和水平方向拼接[A;C;;B;D;;;…]hvncat同时进行n维拼接,其中分号的数量表示拼接所在的维度2.2、数组2.2.3索引与链接复制数组说明:copy函数只复制原值的外层结构,若改动原数组的元素值,复制的元素值也将改变。深复制复制原值的外层结构、原结构中的所有内部对象,这样副本与原值相互独立。函数描述copy(A)对数组进行浅复制deepcopy(A)对数组进行深复制circcopy!(dest,src)将src复制到destjulia>a1=[1,3,5];a2=[2,4,6];julia>array_orig1=[a1,a2];array_copy1=copy(array_orig1);julia>a1[2]=30;array_orig1[1][2],array_copy1[1][2](30,30)julia>array_deepcopy1=deepcopy(array_orig1);julia>a1[2]=60;array_orig1[1][2],array_deepcopy1[1][2](60,30)#改变复制元素的值,对比copy与deepcopy的区别julia>src=reshape(Vector(1:16),(4,4))4×4Matrix{Int64}:15913261014371115481216julia>dest=zeros(4,4)4×4Matrix{Float64}:0.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.0julia>circcopy!(dest,src)4×4Matrix{Float64}:1.05.09.013.02.06.010.014.03.07.011.015.04.08.012.016.02.2、数组2.2.3索引与链接笛卡尔坐标索引函数描述findfirst(A)数组A中元素为true的第一个索引findlast(A)数组A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论