メインコンテンツへスキップ

久しぶりに使ったことのないプログラミング言語(Julia)を学習して気がついたこと

·1623 文字·4 分·
プログラミング 学習 Julia Plots.jl
著者
Admin
目次

Juliaというプログラミング言語を学習し始めた
#

Julia(🔗https://julialang.org/)というプログラミング言語を使えるようになりたいので、一昨日ぐらいから学習し始めた。(現在2024-04-24 4:44 AM)

なぜJuliaを使えるようになりたいのかというと、言語標準で行列が実装されているので検算に利用したかったのと、Julia製のPlotsというバックエンドを切り替えてグラフを描けるライブラリ(🔗https://docs.juliaplots.org/latest/)の存在を知ったので、学習の際の視覚化に便利だと思ったからだ。

そのくらいだ。

使ってみると、型システムが今まで自分が使っていたほとんどの言語より細かくて驚いた。

驚いたのが、Plotsライブラリの使い方もイマイチ分からないし、julia自体もなかなか書けるようにならなかったことだ。
結局10hぐらい弄ってやっとなんとか非常に単純なグラフを描けるようになってきた。

正直Juliaが多少(自分が今までやってきた言語と色々違っているので)とっつきにくいのはあったが、ここまで新しい言語を学習するのが難しいことだと思っていなかった(忘れていた)ので新鮮だった。

一つの言語をそれなりに習得した後に他の言語を習得、利用しようとすると、すぐにググりながら書けるようになったという体験をした人も多いと思う。
もちろん、きっちり学んだ人と同レベルで書けるわけではなく、最低限動作するものを書けるというレベルだが。

それに比べて今回のJuliaはかなり強敵だった。

結局、公式のドキュメント(🔗https://docs.julialang.org/en/v1/)とPlotsのドキュメント(🔗https://docs.juliaplots.org/latest/)の必要そうな場所を読みながらクソコードを書いては実行して消してを繰り返して練習した。

読む必要はないが、書いたクソコードの一部はこんな感じだ。

using Plots
import Printf
using LaTeXStrings

function sample()
    x = range(-10, 10, length=100)
    y = x .- x
    plot(x, [x, y])

    y3 = x .+ y
    plot!(y3)
end

function sample2()
    x = range(-10, 10)
    y1 = @. x^2
    y2 = @. 3x^2

    Printf.@printf("x: %s\ny1: %s\ny2: %s", x, y1, y2)

    plot(x, [y1, y2], title=L"y=ax^2", label=[L"x^2" L"3x^2"], xlabel=L"x", ylabel=L"y")
end

function sample3d()
    x = range(-100, 100,step=2)
    y = @.  2*x
    z= ones(Int64, length(x))
    Printf.@printf("x: %s %s", typeof(x), x)
    Printf.@printf("z: %s %s", typeof(z), z)
    p= plot(x, y, z, xlabel=L"x", ylabel=L"y", zlabel=L"z",lims=(-200,200))

    z2= fill(10, length(x))
    plot!(x, y,z2)

    x = range(-10,10)
    y = @. x-1
    z = x
    plot!(x,y,z)
end

function test()

    r = rand(Int8, 3)
    Printf.@printf("rand: %s %s\n", typeof(r), r)

    debug_range(range(length=10))

    debug_range(range(5, 10))
    
    debug_range(range(-1,1))
    
    debug_range(range(1,-3,step=-1))
    
    debug_range(range(10,11,step=0.1))
    debug_range(range(10,step=2,length=3))

    x= range(-10,10)
    y=@. x+1
    
    Printf.@printf("y: %s %s\n", typeof(y), y)

end

function debug_range(range::Base.AbstractRange)
    Printf.@printf("debug range:  %s %s\n", typeof(range), range)
    for elem in range
        Printf.@printf("elem: type=%s, value=%s\n", typeof(elem), elem)
    end

    println()
end

# plotlyjs()
pythonplot()
# sample()
# sample2()
# test()
sample3d()
# exit()

コード内のsample3d()関数内で描いているグラフはこんな感じだ。

こんなプリチなグラフに好き勝手いたずらできるなんて夢のようだ。

とりあえず簡単なグラフは書けるようになったので、あとはsurfaceとベクトル(設定で線を矢印にするだけみたいだが)を書けるようになればとりあえずは十分だ。

何が言いたかったのかというと、最低限書けるレベルに到達したいのであれば、実際に自分でググったりドキュメントを読みながら足し算したり、変数の型をprintしたり、ループを回したり、if文を書いたりして暴れまわるのはかなり有効だということだ。

もちろん万人に当てはまるわけではないが、多くの人に当てはまると思う。

思えば、自分が初めてプログラミング言語を学んだときも似たようなことをしていたと思う。
あの頃は流石に習得にもっと時間がかかったが。

すぐに使えるようになって当たり前と無意識に思ってしまっていたのかもしれないが、そんなことはないということだ。

編集後記
#

実はJuliaの存在は2018年辺りにwikipediaかなんかのプログラミング言語一覧で見たので知っていた。

名前でどんなのか気になったので、検索したらトップにJuliaというAV女優が出てきたのですぐに調べるのをやめてしまった体験がある。

興味のある方はそちらも学習してみてほしい。
JULIA (AV女優)(🔗https://ja.wikipedia.org/wiki/JULIA_(AV%E5%A5%B3%E5%84%AA) )

Related

ブログや学習メモを書くことのメリット
··788 文字·2 分
ブログ運用 学習 プログラミング 数学 オートクライン効果 アウトプット
TriangleStripでキューブ(直方体)を描く
··1170 文字·3 分
プログラミング 学習 CG
頂点モードについてかんたんに解説。
球体で自作ゲームの衝突検出を実装する
··4511 文字·10 分
プログラミング 学習 数学 内積 衝突検出 ベクトル ゲームプログラミング
ゲームでの簡易的な当たり判定や衝突検出の実装方法を調べたので簡単にまとめた。