Google Colaboratory+Nimで基本文法について勉強する(ライブラリ)

Google Colaboratory+Nimで基本文法(ライブラリ)について勉強します.

Google Colaboratory(以下Google Colab)は、Google社が無料で提供している機械学習の教育や研究用の開発環境です。開発環境はJupyter Notebookに似たインターフェースを持ち、Pythonの主要なライブラリがプリインストールされています。
引用元:Google Colabの使い方 (opens new window)

全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】

# nim4colabのインストール

Google Colab で nimコマンドを使用するためのライブラリであるnim4colabをインストールします.

%load_ext nim4colab により%を付けてNimのコマンドを使えます.

!pip install git+https://github.com/demotomohiro/nim4colab.git
%load_ext nim4colab

# nimpyのインストール

PythonからNimを呼び出すためのNimのライブラリ、nimpyをインストールします.

Nim初心者が始めるNimとnimpy (opens new window)

nimpyをインストールすることで、後述の fib.nim内で使っているnimpyをコンパイル、ライブラリとして使用することができます.

nimbleはNimのライブラリをインストールするためのコマンドです.

%nimble install nimpy -y

# Nimのライブラリ

# ライブラリとは?

ライブラリは、ある程度整理された処理を他のプログラムから読み込むことで、使うことが出来るようにしたファイルです。 Nimでは、Pythonと同じようにこのライブラリをインポートしてコードを書いていきます。

ライブラリは基本的に「import ライブラリ名」で使用できます。

# nimpy

nimのコードをPythonで使えるようにする.

# nim

# Google Colabでnimを使用するためのおまじない
%%nimc
# echo 'Hello, World'
echo "Hello, World"
echo "Hello, World"&"Hello, World" # &は文字列連結演算子
echo "Hello, World \nHello, World"

# echo '''Hello, World, Hello, World'''

# 実行結果
# Hello, World
# Hello, World
# Hello, World

# nim(関数定義)

# Google Colabでnimを使用するためのおまじない
%%nimc
# 返り値:result
proc HelloWorld(str1: string): string =
    var text = "Hello World\n" & str1 # &は文字列連結演算子
    result = text

# 返り値:return
proc HelloWorld2(str1: string): string =
    var text = "Hello World\n" & str1 # &は文字列連結演算子
    return text

# 返り値:関数名
proc HelloWorld3(str1: string): string =
    var text = "Hello World\n" & str1 # &は文字列連結演算子
    text

echo HelloWorld("mass")
echo HelloWorld2("mass")
echo HelloWorld3("mass")

# nimpy

proc HelloWorld(入力変数: 入力の型): 出力の型 {.exportpy.} =
入力値 Nimの型名
なし void
文字列 string
整数 int
リスト seq[string]
# セル内のをsample.nimとして書き出し
%%writefile sample.nim
import nimpy

# proc 定義
# 返り値:result
proc HelloWorld(str1: string): string {.exportpy.} =
    var text = "Hello World\n" & str1 # &は文字列連結演算子
    result = text

# 返り値:return
proc HelloWorld2(str1: string): string {.exportpy.} =
    var text = "Hello World\n" & str1 # &は文字列連結演算子
    return text

# 返り値:関数名
proc HelloWorld3(str1: string): string {.exportpy.} =
    var text = "Hello World\n" & str1 # &は文字列連結演算子
    text

# Writing sample.nim

コンパイル

# 関数をコンパイル
%nim c --tlsEmulation:off --app:lib --out:sample.so sample.nim
# output sample.so
!ls

nimpyの実行

# 作成・コンパイルしたsampleファイルをインポート
import time
import sample as sm # Nimでコンパイル

# 開始時間
start = time.time()
# *nimpyの実行
print(sm.HelloWorld('mass'))
print(sm.HelloWorld2('mass'))
print(sm.HelloWorld3('mass'))
# 終了時間
elapsed_time = time.time() - start
# 実行時間
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")

# 出力結果
# Hello World
# mass
# Hello World
# mass
# Hello World
# mass
# elapsed_time:0.0008447170257568359[sec]

# sugar

sugarは、Nimの標準モジュールの1つです。

macroを使い、複雑なものを簡潔に書けるようにしています.

ここでは,リストの処理を実装している.

# python

nineNum = [1, 2, 3, 4, 5, 6, 7, 8, 9]

oddNum = []
for i in nineNum:
    if i % 2 == 1:
        oddNum.append(i)
print(oddNum)

# nim

# Google Colabでnimを使用するためのおまじない
%%nimc
import sugar
var nineNum = @[1, 2, 3, 4, 5, 6, 7, 8, 9]
var oddNum = collect(newSeq):
  for i in nineNum:
    if i mod 2 == 1: i

echo oddNum

# 実行結果
# @[1, 3, 5, 7, 9]

# strformat

文字列の扱いをしやすくするライブラリ

# python

a = 1
b = 2
print(f"a+b = {a + b}")
print(f"a-b = {a - b}")
print(f"a*b = {a * b}")
print(f"a/b = {a / b}")
print(f"a%b = {a % b}")

# nim

# Google Colabでnimを使用するためのおまじない
%%nimc
import strformat

var a = 1
var b = 2
echo fmt"a+b = {a + b}" #pythonのf-strings 要 strformat
echo fmt"a-b = {a - b}"
echo fmt"a*b = {a * b}"
echo fmt"a/b = {a / b}"
echo fmt"a%b = {a mod b}" # %ではなくmod, 結構罠

# 実行結果
# a+b = 3
# a-b = -1
# a*b = 2
# a/b = 0.5
# a%b = 1

# nimpy

# セル内のをsample.nimとして書き出し
%%writefile nimodule.nim
import nimpy, strformat

proc echoAxB(a, b: int): int {.exportpy.} =
  echo fmt"a+b = {a + b}" #pythonのf-strings 要 strformat
  echo fmt"a-b = {a - b}"
  echo fmt"a*b = {a * b}"
  echo fmt"a/b = {a / b}"
  echo fmt"a%b = {a mod b}" # %ではなくmod, 結構罠
  result = 1 # result は特別な変数で,この値が暗黙的にreturnされます.  
# 関数をコンパイル
%nim c --tlsEmulation:off --app:lib --out:nimodule.so nimodule.nim
# output sample.so
!ls
import nimodule

a = nimodule.echoAxB(3,2)
print(a)
# 1

# まとめ

Google Colaboratory+Nimで基本文法(ライブラリ)について勉強しました.

# 参考サイト

Nimの特徴や使い方をわかりやすく解説! (opens new window)

Nim初心者が始めるNimとnimpy (opens new window)

Speeding up Python code with Nim (opens new window)

Nimを組み込んでPythonを高速化してみた (opens new window)

至高の言語、Nimを始めるエンジニアへ (opens new window)

Nim Compiler User Guide (opens new window)

スレッドローカルストレージ (opens new window)

Nim 関数 (opens new window)

PythonistaのためのNim入門 (opens new window)

nim内包表記 (opens new window)

Nimの便利な標準ライブラリ sugar (opens new window)

Nim初心者が始めるNimとnimpy (opens new window)

Nimでゼロ埋め (opens new window)

Nim 変数、定数の宣言方法(var, let, const) (opens new window)

Nimを知ってほしい2022 (opens new window)

nim いろいろなコメントの方法 (opens new window)

【Nim】個人的逆引きリファレンス (opens new window)

全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】

Google Colaboratory+Nimで基本文法について勉強する(リスト, for文m, If文)

Google Colaboratory+Nimで基本文法について勉強する(リスト, for文m, If文)

Google Colaboratory+Nimで基本文法(リスト, for文m, If文)について勉強します.

学習済みモデルで白黒映画をカラー映画に変換する(1)

学習済みモデルで白黒映画をカラー映画に変換する(1)

YouTube Data API を使って再生リストから動画の再生回数等の情報を取得します.