好奇心の横断歩道を創る!

自分の思考をラバーダック・デバッグするためのブログ

Python → Julia の機械的な書き換え、ToDoList

純粋に自分のために書く

 

・for, if, whileの:を消す

・for i in range(start, stop): → for i = start: stop-1

for i in range(start, stop, step):

    .....

for i = start:step:end # stopとendの違いに注意
    ......
end

・Juliaでは、if, while の条件はBool値しか無理?

・インデントの終わりにendをつける

・juliaファイル(*.jl) の内部では、

c = 0 #  グローバル変数の定義

for i = 1:10

    c += i   #  ここのcはグローバル変数として扱われない。

      #  ので事前に定義されていない的なエラー。

end

これは

function main()

    c = 0   # ローカル変数定義

    for i = 1:10

        c += i

    end

end

main()

みたいに書かなきゃダメ。インデントが入ると、グローバルな変数じゃなくなるっぽい。ベクトルにも当てはまった。そして、Jupyter Notebookで実行したときはこんな不思議減少は起こらなかった。何故?

 

Pythonだとリストや辞書とかを引数にする関数は、関数内でリストや辞書の中身を書き換えても、returnして上書きしない限り、更新されないっぽい。

def f(lst):

    lst[0] *= 0

lst = [1 for i in range(10)]

f(lst)

print(f[0]) # 0

function f(lst)

    lst[1] *= 0

end

lst = [1 for _ = 1:10]

f(lst)

println(f[1]) # 1

ってかんじ。引数で受け取った時点でディープコピーして、関数内では関数内でしか通用しないローカル変数としているのかも。

 

・True, False → true, false

・None → nothing

・def → function

・len(obj) → length(obj)

・min(obj), max(obj) → minimum(obj), maximum(obj)

・df = pd.DataFrame の大きさは(index_size, column_size) = size(df) で取得

・要素同士の積(アダマール積)は、 np_array * np_array → vector .* vector といったように .* を使う

内積は、np.dot(np_array, np_array) → vector '* vector

・np.dot(arr1, arr2) → vector1 \cdot vector2

・and, or → &&, ||

・set(), dict(), list() → Set(), Dict(), List()

・{key1:value1, key2:value2} → Dict(key1=>value1, key2=>value2)

・setobject.add(v), listobject.append(v) → push!(set, v), push!(lst, v)

・list_or_arr_or_tuple[:stop], list_or_arr_or_tuple[start:] → arr_or_tuple[1:end], arr_or_tuple[start:end] という風に、区間の前後を省略せずに書く

・配列とタプルのインデックスは、1始まり。おかげでインデックスに%を使いたいときとか大変

・py_list[-1], py_tuple[-1] → jl_array[end], jl_tuple[end] といった具合に、endを使う。py_list[-2]はjl_array[end-1]みたいに書く

・py_list.append(value) → push!(jl_array, value)

・py_set.add(value) → push!(jl_set, value)

・sort(py_list), sorted(py_list) → sort!(jl_array), sort(jl_array)

・a**b → a^b        (Excelと同じで分かりやすい!)

・"string_1" + "string_2" → "string_1" * "string_2"        (どうしてそうなった????)

・"string" * 10 → "string" ^ 10

・str型は"string"、chr型は'c' といった具合に、"と'を使い分ける。

・"string" * 'c' は"stringc"

・"string" == "string" はture

・"c" == 'c' はfalse

・’c’ == 'c' はtrue