公司簡介模板300字安陽seo
文章目錄
- 向量
- 數(shù)列
- 矩陣
- 特殊數(shù)組
- 數(shù)組函數(shù)
Julia系列:編程初步
向量
Julia中有兩種向量,一種是類型統(tǒng)一的,另一種則可包含不同類型的變量,例如下面兩個向量都是允許存在的
aNum = [1,2,3] # 類型為 3-element Vector{Int64}
aAny = [1.0, 1, "one"] # 類型為 3-element Vector{Any}
Julia通過方括號索引,下標從1開始
aNum[1] # 1
aAny[3] # "one"
由于向量中允許插入不同的數(shù)據(jù)類型,所以自然支持向量的嵌套
aMat = [[1,2], [3,4]] # 類型為 2-element Vector{Vector{Int64}}
在科學(xué)計算中,最重要的自然是數(shù)值向量。在Julia中,對于維度以及嵌套類型相同的向量,就可以自由地進行計算。但需要注意,如果想對所有元素執(zhí)行相同的函數(shù)操作,必須在運算符前或者函數(shù)后面添加一個.
,比如
sin(aNum) # ?報錯
sin.(aNum) # 正確
aNum * aNum # ?報錯,因為兩個都是列向量,沒法做矩陣乘法
aNum .* aNum # 元素之間一對一的乘法
aNum + 1 # ?報錯,aNum和1的維度不同,無法相加
aNum .+ 1 # 得到[2, 3, 4]
數(shù)列
Julia中,通過a:b:c
,可以生成從a到c生成間隔為b的等差數(shù)列,一般在循環(huán)時比較常用。例如
for i in 1:2:10print(i, " ")
end
# 1 3 5 7 9
這種數(shù)列可以參與到向量計算中,如果在計算時破壞了其等差數(shù)列的特征,那么將自動轉(zhuǎn)換為向量,此外通過collect函數(shù),也可以將數(shù)列轉(zhuǎn)為向量
aRange = 1:2:5
sin.(aRange) # 類型變?yōu)?3-element Vector{Float64}:
collect(aRange) # 類型變?yōu)橄蛄?
矩陣
盡管向量嵌套也可以起到矩陣的作用,但Julia為矩陣設(shè)計了一套專門的生成方案。
在矩陣中,行間元素用空格隔開,列間元素用分號隔開;而由逗號生成的向量,則默認為列向量。下面生成一個 1 × 3 1\times3 1×3的矩陣,其實就是行向量,則可與前面的列向量做矩陣乘法
m1 = [1 2 3] # 1×3 Matrix{Int64}
m1 * aNum # 返回值 14
數(shù)列的表達式也可以被應(yīng)用在矩陣中
[1:5 1:5] # 生成5行2列矩陣
[1:5; 1:5] # 生成10行1列矩陣
[1:5, 1:5] # 生成兩個Range組成的向量
特殊數(shù)組
對于一列數(shù)據(jù),Julia會稱之為向量;如果有行有列,則會升級為矩陣;隨著嵌套層級進一步增加,就會升級為數(shù)組??梢岳斫鉃?#xff0c;向量是一維數(shù)組,矩陣是二維數(shù)組。
Julia提供了一些函數(shù),用以生成常用的數(shù)組,比較常用的有
- zeros, ones, rand, randn
分別用于生成全零向量、全一向量、[0,1]
區(qū)間的隨機變量、服從標準正態(tài)分布的隨機變量。這四個函數(shù)的輸入?yún)?shù)均為數(shù)據(jù)類型T
和各數(shù)組維度,T默認為浮點數(shù),維度默認為1。
zeros(3,3,3) # 返回值類型 3×3×3 Array{Float64, 3}
ones() # 返回值 1
如果想定制矩陣中的值,可以用fill
函數(shù),其輸入值分別是填充值和維度
julia> fill("Hi", 2,2)
2×2 Matrix{String}:"Hi" "Hi""Hi" "Hi"
對于布爾代數(shù),特別提供了連個函數(shù)用于生成全真或者全假的函數(shù),二者的輸入?yún)?shù)均為維度
- trures, falses
數(shù)組函數(shù)
Juli提供了一些基本的函數(shù),用于檢測數(shù)組的信息
k = 1
下表中,k
均為可選參數(shù),省略時將返回所有維度的情況。
函數(shù) | 返回值 | 備注 |
---|---|---|
eltype(aNum) | Int64 | 返回數(shù)據(jù)類型 |
length(aNum) | 3 | 數(shù)組長度 |
ndims(aNum) | 1 | 數(shù)組維度 |
size(aNum,k) | 3 | 第k個維度的元素個數(shù) |
axes(aNum,k) | Base.OneTo(3) | 第k維有效索引 |
eachindex(aNum) | Base.OneTo(3) | 一個訪問 A 中每一個位置的高效迭代器 |
stride(aNum,k) | 1 | 在第 k 維上的間隔 |
此外,更改數(shù)組維度也是必要需求,用函數(shù)reshape
完成
reshape(aNum, 1, 3) # 返回1x3矩陣 1 2 3
通過fill!
函數(shù),可以更改數(shù)組中所有值
fill!(aNum, 0) # aNum變成[0,0,0]
如果在函數(shù)結(jié)尾出現(xiàn)了感嘆號,那么說明函數(shù)輸入的參數(shù)可能會在調(diào)用后發(fā)生變化。fill!并不僅僅返回一個更改后的數(shù)組,同時也將aNum的值改變了。Julia的這個規(guī)范可以說非常貼心了。