Julia 矩陣計算

2021-10-02 11:33:45 字數 3518 閱讀 8928

####使用巨集@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...