####使用巨集@isdefined
(@isdefined x) || (x = new_value)
####自定義巨集 ,可以在賦值的時候,如果某個屬性變數沒有被賦值,則將值設定給某個變數
macro ifund(
exp)
local e =
:($exp
) isdefined(main, e.args[1]) ? :
($(e.args[1])):
:($(esc(
exp)))
endz=
2 #2
@ifund z=
1 #還是2
####但是要注意作用域
t#undefvarerror: t not defined
#top-level scope
#這裡雖然賦值成功
for i=1:
10 t = "$(@ifund t=
"") $i" end
#但是這裡依然會報錯,因為上面賦值的t作用域只有在for迴圈中
t#undefvarerror: t not defined
#top-level scope
目前無法刪除矩陣當中的行,根據julia作者的解釋應該是這樣的:
不能從矩陣中刪除行。事實上,matlab有簡單的語法,這有點陷阱,因為實際刪除行的方式是建立乙個沒有行的副本,因此我們決定使其更具透明的效能特徵。您可以更改一維陣列的大小,例如執行push!(v,x)和pop!(v) 。
可以使用類似的方式過濾某一行
a[1
:size
(a,1
) .!= 2,: ]
dataframes 是可以刪除的 ,它有乙個deleterow!() 函式,可以刪除指定的行,但是矩陣不可以。
#排除第2行,其他所有的資料,.!= 表示不除去某行,其中end 也可以使用size(b,1) 替代
b = a[1
:end .!= 2,:]
#只選擇第2行
b = a[[2],
:]size
(b)#(1,
3)size
(b,1
)#1 就上面的tuple (1,
3)中的1
size
(b,2
)# 3 就上面的tuple (1,
3)中的3
#同樣對列的操作也是類似的
c = a[:,1
:end .!= 2] #排除第2列
c = a[:
, [2]] #只選第2列
#第一種方式:
findfirst(all, collect(eachrow(t1 .<= t2)))
#第二種方式:
#返回的是矩陣的一列
all(t1 .<= t2; dims=2)
# 3×1 bitarray:
# 0
# 1
# 0
findfirst(all(t1 .<= t2; dims=2)
)#cartesianindex(2,
1)#拿到cartesianindex的 第乙個引數就是 指定的 行 #2
findfirst(all(t1 .<= t2; dims=2)
)[1]
#第三種方式:
findfirst(vec(all(t1 .<= t2; dims=2)
))
對於int 或者其他數值型別的矩陣來說 直接 用 !操作是不合法的,需要轉換為bitarray
julia> a = rand(0:
1,5,
5)5×5array:00
0110
1001
0111
0110
0011
100julia> b = bitarray(a)
5×5 bitarray:00
0110
1001
0111
0110
0011
100julia> .!b
5×5 bitarray:11
1001
0110
1000
1001
1100
011b = bool.(a)
# 5×5 bitarray:
# 101
00# 001
10# 010
10# 111
00# 010
11#或者a .!= 0
# 5×5 bitarray:
# 101
00# 001
10# 010
10# 111
00# 010
11#又或者使用iszero函式
(!iszero).(a)
# 5×5 bitarray:
# 101
00# 001
10# 010
10# 111
00# 010
11
#合併行
a = vcat([123
45],[678
910;11
1213
1415])
# 3×5
array:
# 123
45# 678
910# 11
1213
1415
#合併列
b = hcat([67;
89;10
11;1213;14
15],[1;2
;3;4
;5])
# 5×3
array:
# 671
# 892
# 10113
# 12134
# 14
155
a = reshape(1:
15,3,
5)# 3×5 reshape(
::unitrange,3,
5)with eltype int64:
# 147
1013
# 258
1114
# 369
1215
#使用函式
transpose(a)
# 5×3 linearalgebra.transpose,tuple{}}}:
# 123
# 456
# 789
# 10
1112
# 13
1415
#使用運算子
a'# 5×3 linearalgebra.adjoint}:
# 1611
# 2712
# 3813
# 4914
# 5
1015
julia常用矩陣函式 Julia中的函式
如何宣告函式 julia為我們提供了一些編寫函式的方法。第乙個需要function和end關鍵字 function sayhi name println hi name,it s great to see you endfunction f x x 2end 我們可以像這樣呼叫已宣告的函式 sayh...
Julia對矩陣進行預先賦值
我們知道,對於matlab和julia 而言,預先賦值可以獲得更快的運算速度,特別是matlab.由於julia 經常用循還解決相關問題,預先賦值使用的頻率相比matlab而言大大減小。不過,還是有一些地方,可能用到的,盡量不要使用cat 操作,效率低下,速度慢得很。這個原則,還僅是對於matlab...
初試 Julia 語言
之所以這樣說,有三個方面的理由 作為乙個動態語言,它的 jit 編譯器 在很多情況下 還沒有智慧型到,讓我可以同時享受動態語言的便利和它的速度優勢。例如最近我在試用 julia 時最先嘗試的就是把原來用 numba 寫的函式重寫一遍,然而發現結果非常不好。julia 版本的函式執行速度相當於純 py...