Julia の 2 日間のファストエントリー学習ノート

1. Juliaの基本ルールの使い方

  1. ルールは Python と同じで、大文字と小文字が区別されます。
  2. 単一行のコメントには # を使用し、複数行のコメントには #= ... =# を使用します。

2. Julia の配列と行列

  1. Julia 配列形式は Python 宣言形式と同じですが、Julia 配列のサイズと型が固定されておらず、複数のデータ型を 1 つの配列に収容できる点が異なります。
  2. さまざまな値 (Any) を直接入力することも、最初に配列の型を宣言してから、対応する型の値を書き込むこともできます。
    たとえば、arr = Int64[1,2,3] または arr = String["adadd","vbbbb"] です。
  3. 配列は Array を使用して型と次元を事前に宣言できます (デフォルトの型と次元を変更します)。
  4. 配列には豊富なパディング機能もあります。fill!(A, x) - 配列 A を値 x で埋めます。fill(x, dims…) – 値 x が入った配列。
#声明两行三列
 arr = Array{
    
    Int64}(undef,2,3) 
 println(arr)
 #对arr变量进行修改
 arr = [1 2 3;4 5 6]
 println(arr)
 arr = [[1;2] [3;4] [5;6]]
 println(arr)

演算結果

ここに画像の説明を挿入
4. 楕円を使用して配列を作成することもできます

arr1 = [1:10]
println(arr1)
arr1 = [1:10...]
println(arr1)

ここに画像の説明を挿入
配列の生成:

  1. collect 関数と range 関数 range を使用するための
    正式なパラメータは、sart、stop、length、step です。
    length は配列要素の数を表します。
arr = collect(range(1,step=2,stop=10))
 println(arr)
  1. 内包表記とジェネレーターを使用した配列の作成 (for ループ)
 arr = [n*2 for n in 1:10]
 println(arr)

ここに画像の説明を挿入

3.ジュリアタプル

タプルは配列に似ており、表面的には 1 つは () で、もう 1 つは [] であり、タプルの区切り文字として使用されます
それに比べて、Julia タプルははるかに使いやすいです。
タプルの作成とマージのコードは次のとおりです

#元组创建第一种方式,key和vulue分开写
key_shape = (:key1,:key2)
value_shape = ((1,2,3),(4,5,6))
item = NamedTuple{
    
    key_shape}(value_shape)
println(item)
println(item.key1)
#元组创建第二种方式,key和vulue一起写
item1 = (key3 = (100,200),key4 = (1,2,3),key5 = (0000))
println(item1)
println(item1.key3)
#合并元组
item1_all = merge(item,item1)
println(item1_all)  

タプルの関数の使い方

function testFunc(x;y=20,z)
    println("x=$x,y=$y,z=$z")
end

item = (y=200,z=30)
testFunc(1;item...)

演算結果
ここに画像の説明を挿入
ここに画像の説明を挿入

2 つのタプルのキー値が同じである場合、前のキー値が後の値を置き換えることに注意してください。タプルがパラメータとして関数に渡されると、タプル内のキーが解放され、関数のパラメータの 1 つとして使用されます。入力パラメータ間に競合がある場合、後から入力されたパラメータが以前のパラメータを上書きします。渡されるパラメータ。

4. Juliaのデータ型

Julia 整数C 言語の Long Long int は、 -2 63 ~ 2 64 -1
のみです。オーバーフローに直面して、big() 関数を使用します。型変換には、T(x) を使用して強制するか、変換するconvert関数。浮動小数点型


ここに画像の説明を挿入

ここに画像の説明を挿入
ここに画像の説明を挿入

5. 基本操作機能

算術演算子
ここに画像の説明を挿入
論理演算子
ここに画像の説明を挿入
関係演算子

ここに画像の説明を挿入
ビットごとの演算子代入
ここに画像の説明を挿入
演算子
ここに画像の説明を挿入

6. 複素数演算

a = 2*(1+im)
println(real(a))  #取实
println(imag(a))  #取虚
println(a)

上記のコードの 2*(1+im) は複素数、1 は実数、im は虚数です

セブンストリング

str = "hello"
println(str[begin])
println(str[end])

出力結果
ここに画像の説明を挿入
文字列は集合に相当し、各文字は要素となり、各文字はインデックスに従って出力できます。
文字列インターセプトは、SubString を通じて実行できます。

str1 = SubString(str,1,3)

出力結果はhelです

多くのことはありません。コードに進むだけです

str = "hello"
println(str[begin])
println(str[end])
# 按照索引截取字符串片段
str1 = SubString(str,1,3)
println(str1)
str2 = "world"
#合并插入字符串
str_all = string(str,',',str2)
println(str_all)
#$符号后的会被当成插入其值于字符串中的表达式
println("1+1=$(1+1)")
#查询字符,可以用first,也可以用last。
println(findfirst(isequal('e'),str_all))
#重复输出字符串
println(repeat("abc,",10))
#插入字符串
sstr = ["nike","tom","jek"]
println(join(sstr,"小明","小红")) 

一部の文字列関数:
firstindex(str) - str へのインデックス付けに使用できる最小の (バイト) インデックスを与えます (文字列の場合は常に 1 ですが、他のコンテナの場合は必ずしもそうではありません)。
lastindex(str) - str へのインデックス付けに使用できる最大 (バイト) インデックスを指定します。
length(str) – str 内の文字数。
length(str, i, j) - str 内の有効な文字インデックス i ~ j の数。
ncodeunits (str) – 文字列内のコード単位 (コード単位) の数。
codeunit(str, i) - 文字列 str のインデックス i にあるコード単位の値を返します。
thisind(str, i) - 文字列内の任意のインデックスを指定して、インデックス ポイントが配置されている最初のインデックスを検索します。
nextind(str, i, n=1) - インデックス i の後の n 番目の文字の先頭を検索します。
prevind(str, i, n=1) - インデックス i の前の n 番目の文字の先頭を検索します。

8. ジュリア関数

関数のよくある使い方

#递归函数
function test1(x)
    x+=1
    if x >10 
        return true
    else
        println(x)
        return test1(x)
    end
end
println(test1(1))

タプルを使用して複数の戻り値があります


function test(i,j)
    i+j,i+222
end
println(test(1,2)) 

ここに画像の説明を挿入

#简易函数,当函数中只有一个表达式时可以用
f(x,y) = x+y
println(f(1,2))
#有意思的是,函数功能也能被传递
g = f
println(g(2,3))

#一些Unicode 字符也可以当作是函数名称,也就意味着汉字和一些其他国家的字体也能当作函数的名称
函数(x,y)=x+y
println(函数(2,2))

#也可以通过::来限制函数的返回值类型
函数1(x,y):: Int8 = x*y
println(typeof(函数1(2,2))) 

#参数默认值,带默认值的参数写在后面,没有默认值的写在前面,顺序不对会报错,也可以将二者用;分割开,形成关键字函数,即在输入函数值的时候可以进行关键字KEY=value匹配,这样做的好处就是可以设置很多个形参,也不怕参值匹配错误。
function fun1(a,c;b=10)
    println("a=$a,b=$b,c=$c")    
end 
fun1(1,2)
fun1(b=11,1,2)

#匿名函数,顾名思义匿名函数没有函数名字,但有函数的形参。以箭头->标注。 
a=x->x*2
println(a)
#有参匿名函数 
a1 = map(round,[1,2,3])
a2 = map(x->x*2,[1,2,3])
println(a1)
println(a2)
#无参匿名函数,主要用于延迟计算。
#get(()->time(),dict1,key)
#Julai语言还支持三目运算符,可嵌套
#Map通常会和匿名函数一起运用的,包含一个匿名函数,转换为一个新的集合。
#filter通常也和匿名函数一起运用,其中的匿名函数多为筛选条件,返回通过筛选条件的集合
arr = filter(x->x % 3 ==0,[1,2,3,4,5,6])
println(arr)

9. プロセス制御


#流程控制 
#begin...end使用,跟函数有些相似,执行一串命令集,返回最终结果.
z = begin
    x=1
    x+=1
    x=x*2
end
println(z)
#链的表达,与上面原理相同 
z = (x=1;x+=1;x*=2)
println(z)
#也可以二者结合使用
#条件表达式,forwhile用法与python中的用法差异不大。
function  func(x)
    if (x>100)
        println("大数")
    elseif (x<10)
        println("小数")
    else
        println("中数")
    end    
end
for i in [1,50,101]
    func(i)
end
for i = 1:5
    func(i)
end
#嵌套for循环
for i = 50:55,j=45:50
    #println((i,j))
    @show(i,j)
end
#推导式,有点像上面提到过的map,但是这个明显可以灵活运用。 
arr = [i*2 for i in 1:5]
println(arr)    
#花样遍历,可以遍历想要的内容,具体都有哪些属性,要看enumerate。
arr1 = ["a","b","c"]
for (index,value) in enumerate(arr)
    println("索引:$index,内容:$value")
end

演算結果
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

10. 例外処理

#异常处理
#具有try-catch-finally用于捕捉异常,跟python用法相同。
try
    a=a/0
catch e
    println("出错了")
finally
    println("结束")
end
#也有throw 抛出异常的功能,但是这个抛出异常后还是会中断程序。
f(x)=x/0:throw(ErrorException)
f(1)

演算結果
ここに画像の説明を挿入

11. ジュリア辞書


#Julia字典和集合  与python中的字典和集合差不多 
dict = Dict("zpx"=>1977115899,"hsh"=>4567,"php"=>5544)
#查询key
println(haskey(dict,"zpx")) #true and false
#查询key=>value
println(in(("zpx"=>1977115899),dict))
#添加key=>value
dict["java"]=544777
println(dict)
#删除
delete!(dict,"php")
println(dict)
#获取所有的key和value
println(keys(dict),values(dict))
#迭代
for d in dict
    println(d) 
end
#字典并集与差集
dict1 = Dict(1=>"tom",2=>"jak",3=>"him","zpx"=>1977115899)
println(union(dict,dict1)) #并
println(setdiff(dict,dict1)) #差
#合并字典,跟并集功能相同
println(merge(dict,dict1))
#排序
for value in sort(collect(values(dict)))
    println(value)
end
#导入第三方库排序
import DataStructures
runoob_dict = DataStructures.SortedDict("S" => 220, "T" => 350, "U" => 400, "V" => 575, "W" => 670)
println(runoob_dict)
 

演算結果

ここに画像の説明を挿入

12.ジュリアセット


#set集合,是一个无序列表,跟数列不同的是无序的即存入数据没有顺序,没有索引,部分方法跟字典相似
arrs = Set(["sss","dsds","adsds","ssddd"])
println(arrs)
#添加元素
push!(arrs,"zpzx")
println(arrs)
#查询元素
println(in("zpzx",arrs)) 
#求两个set集合的交、并、差集
arrs1 = Set(["java","php","python","Julia","zpzx"])
println(union(arrs,arrs1)) #并
println(intersect(arrs,arrs1)) #交
println(setdiff(arrs,arrs1))

演算結果
ここに画像の説明を挿入

13. ジュリア・デイツ

特別なことは何もありません。時刻の形式だけです。コードはここでテストできます。

import Dates
println(Dates.Time(Dates.now()))
println(Dates.Date(2022,8,4))
println(Dates.today())
println(Dates.now(Dates.UTC))
date = Dates.DateTime("20220126 060000","yyyymmdd HHMMSS")
println(date)
println(time()) 
now = Dates.now()
println(now)

スクリーンショットを実行する

ここに画像の説明を挿入

14. ジュリア・イオ

#文件写入
open("D:/Julia-1.6.2/test/test.txt","w") do io
    write(io,"hello,world!\n你好,世界!")
end;

#文件读取
txt = open("test.txt")do file
    read(file,String)
end
println(txt)

#逐行读取——readlines(中文会乱码)
file1 = open("test.txt")
txt1 =  readlines(file1,keep=true)
close(file1)
println(txt1)
#逐行读取——eachline
open("test.txt") do file
    for ln in eachline(file)
        println("$(length(ln)),$(ln)") 
        
    end
end

#获取文件状态
for n in fieldnames(typeof(stat("test.txt")))
    println(n,":",getfield(stat("test.txt"),n))
end

演算結果
ここに画像の説明を挿入

15. ジュリアマクロ

マクロは、生成されたコードをプログラムの最終本体に組み込むためのメカニズムを提供します。Julia の構文ではマクロに特殊文字 @ が含まれています。

macro sayhello(name)
    return :(println("hello,",$name))
end
@sayhello("human")

演算結果
ここに画像の説明を挿入

この例では、コンパイラは @sayhello のすべての出現を次のように置き換えます。

:( println("Hello",$name) )

やっと

私はルーキー チュートリアルから学びました。このブログのコードの一部はこれに似ており、いくつかのスクリーンショットもルーキー チュートリアルからのものですが、コピーする代わりに私の理解の一部を書き留めました。一部は省略されており、古典的で短いコードのケースのみが残されており、すべての人に役立つことを願っています。

おすすめ

転載: blog.csdn.net/Tom197/article/details/126135043