MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Juliaのコードをコンパイルして高速実行する方法

 

目次

  • 目次
  • 注意 (2020年8月追記)
  • はじめに
  • Juliaにおけるコンパイル
  • Juliaのコードをコンパイルするスクリプトjuliac
  • JuMPの最適化コードをjuliacでコンパイルして高速化してみる
  • juliacを使う時の注意点
    • 現在の所、コンパイルするjuliaのコードはhello.jlという名前でないとCコードを変更する必要がある
    • PyCallが含まれたコードはコンパイルできない
    • JuMPのコードをコンパイルする時は、配列のインデックスの始まりは1にする
    • JuMPの非線形最適化のマクロがあるとコンパイルできない
  • 参考資料
  • MyEnigma Supporters

注意 (2020年8月追記)

この記事は非常に古く、Julia 1.0以降では利用できません。。。

現時点で単一バイナリを作る方法はなくなってしましましたが、

Juliaのランタイムも含めて一つのディレクトリにまとめるのは、

PackageCompiler.jlで実現可能です。

github.com

 

はじめに

最近、Juliaというプログラミング言語にハマっているのですが、

myenigma.hatenablog.com

Juliaを使って、

高計算パフォーマンスなシステムを構築したい時に

やはりコンパイルできたらいいなと思ってしまいます。

 

Juliaは動的な言語なので、

実行時にJITコンパイラを使ってコンパイルをしながら

コードを実行するのですが

すでにコードがfixされたコードであっても、

実行するたびにコンパイルする必要があるため、

その分、実行が遅くなりがちです。

 

しかし最近、下記の記事や、

下記のリポジトリのライブラリなどのように、

github.com

Juliaをコンパイルする取り組みが始まっているので、

今回はJuliaをコンパイルし、実行する手法を紹介したいと思います。

 

続きを読む

カナダに旅行する際に知っておくと便利なこと

目次

  • 目次
  • はじめに
  • ビザ無しで渡航する場合、カナダ版ESTA eTAが必須
  • カナダのバンクーバではUberやLyftが使えない
  • バンクーバではCompass Cardを使ったバス・地下鉄・フェリー移動が便利
  • T-mobileユーザはカナダでローミングが5ドルでできる。
  • その他の国で気をつけるべきこと
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、初めてカナダのバンクーバに行きました。

 

カナダに初上陸した。サンフランシスコと違って街が綺麗すぎる。。(笑)

 

今回、カナダのバンクーバを訪れて、

事前に知っておくと便利だと思ったことをまとめておきます。

続きを読む

最大流問題(Max Flow Problem)とPython, Juliaによる解法サンプルプログラム

目次

  • 目次
  • はじめに
  • 最大流問題(Max Flow Problem)
  • Juliaによるサンプルプログラム
  • scipyによる最大流問題の解法
  • 参考資料
  • MyEnigma Supporters

はじめに

これまで、最適化問題の代表的な問題である

ポートフォリオ最適化や、

myenigma.hatenablog.com

ナップサック問題問題などを

myenigma.hatenablog.com

最適化ライブラリで解く方法を紹介してきましたが、

今回は最大流問題(Max Flow Problem)という

こちらも有名な最適化問題の概要と、

それをプログラムで解く方法について紹介したいと思います。

 

続きを読む

Python3のtkinterによるクロスプラットフォームGUIアプリ作成入門

目次

  • 目次
  • はじめに
  • tkinterのバージョンを確認する
  • Windowを作る
  • ラベルやフォントを使う
  • ステータスバーに文字などを表示する
  • ボタンを作る
  • 画像の表示とWidgetのグリッド配置
  • Canvasに図形を描く
  • メニューバーを作る
  • チェックボックスを使う
  • 一行のフォームに文字や数値を入力できるようにする
  • Frameでウィジェットをグループ化する
  • リストボックスを作る
  • メニューバーを作る
  • スクロールバーを作る
  • タイトル付きフレームを作成する
  • ファイルダイアログでファイルを選択する
  • メッセージボックスを作る
  • MatplotlibのグラフをtkinterのWidgetとして埋め込む
  • Pythonのその他GUIライブラリ
    • pyqt
    • kivy
  • 参考資料
  • MyEnigma Supporters

はじめに

以前、PythonのGUIフレームワークとして、

PyQtや

myenigma.hatenablog.com

kivyを紹介しましたが、

myenigma.hatenablog.com

上記のような、外部ライブラリだと

ユーザにそれらのライブラリをインストールをしてもらう必要があるため、

気軽に使えない場合がありました。

 

PythonにはデフォルトのGUIフレームワークとして

tkinterがあるのですが、

TkInter - Python Wiki

25.1. tkinter — Python interface to Tcl/Tk — Python 3.6.8 documentation

見た目がかなり野暮ったかったので、

Pythonさえインストールしておけば使えるという特徴はあったのですが、

あまり使う気が起きませんでした。

tkinter - Google 検索

 

しかし先日、

下記の記事で紹介した通り、

myenigma.hatenablog.com

最近のPython3.6.xでは、

tkinterがバージョンアップしており、

tkinterのversion8.0以降はかなりGUIの見栄えが改善され、

各OSにフィットしたものになっています。

 

そこで今回は

今回はこのtkinterの簡単な使い方について紹介したいと思います。

 

下記のサンプルコードはすべて書きのGitHubリポジトリ上でも公開しています。

github.com

 

続きを読む

一週間ニューヨークに旅行して、事前に知っておくと便利だと思ったこと

目次

  • 目次
  • はじめに
  • 空港からマンハッタンへの移動はLyftとUberが安くて便利
  • 地下鉄のメトロカードを使うと電車代がちょっと安くなる
  • ベタな観光名所に行く場合はCityPassとC3チケットがお得
  • 飛行機の移動を快適にしておく
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、

ニューヨークに約一週間旅行してきたのですが、

アメリカに来たって感じた。

ニューヨークに来た😁

 

ニューヨークについて事前に知っておくと

便利だと思ったことをメモしておきたいと思います。

続きを読む

Lasso正則化とRidge正則化の概要とJuliaによる最適化サンプルコード

目次

  • 目次
  • はじめに
  • Lasso正則化, Ridge正則化とは?
  • JuliaによるLasso正則化とRidge正則化最適化サンプルコード
  • 参考資料
  • MyEnigma Supporters

はじめに

以前、有名な最適化問題として

線形計画法や

myenigma.hatenablog.com

二次計画法

myenigma.hatenablog.com

ポートフォリオ最適化

myenigma.hatenablog.com

ナップサック問題

myenigma.hatenablog.com

などの説明と簡単なサンプルコードを紹介しましたが、

今回の記事では、Lasso正則化, Ridge正則化と呼ばれる

統計学や機械学習でよく使用される最適化問題の概要と、

このLasso正則化, Ridge正則化を解くサンプルコードについて紹介したいと思います。

 

続きを読む

Pythonヒッチハイクガイドを読んで学んだこと

目次

  • 目次
  • はじめに
  • Can I use python3でライブラリがpython3で利用できるか確認できる
  • pythonのリポジトリの構成
  • with構文をうまく使う
  • コードのデバッグをするときはテストファイルを作る。
  • tkinterはバージョン8.0から外見が洗練された
  • ロギングが print より優れている理由
  • PythonのテストフレームワークにはNoseを使う
  • Python製のCIサーバ Buildbot
  • Pythonの並列処理にはconcurrent.futuresを使う
  • 参考資料
  • MyEnigma Supporters

はじめに

Pythonに詳しい方が、

下記のPythonヒッチハイクガイドという

Webの資料を紹介していたので、

一通り目を通してみて

知らなかったことをメモようにまとめておきたいと思います。

英語版

日本語版

 

続きを読む

ポートフォリオ最適化問題とJuliaによるサンプルコード

目次

  • 目次
  • はじめに
  • ポートフォリオ最適化問題
  • 線形制約のみのポートフォリオ最適化
  • Juliaによるポートフォリオ最大化問題解法サンプルコード
  • 参考資料
  • MyEnigma Supporters

はじめに

以前、凸最適化技術の基礎として、

線形計画法や、二次計画法の概要を説明し、

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

凸最適化の有名な応用例である

ナップザック問題を解くシミュレーションを紹介しました。

myenigma.hatenablog.com

 

今回は同じく、凸最適化の応用例として有名な

ポートフォリオ最適化問題の概要と、

ポートフォリオフォリオ最適化問題を解く、

Juliaサンプルコードを紹介したいと思います。

 

続きを読む

Juliaのコードを更に高速化する方法

目次

  • 目次
  • はじめに
  • Juliaを高速化するために注意すべきこと
    • グローバル変数を避ける
    • @timeでパフォーマンスを計測し、メモリアロケーションに注意を払うこと
    • パフォーマンス関連ツールを使う
    • 抽象型のコンテナは避ける
    • 型宣言
    • 抽象型のフィードを避ける
    • キーワード引数の型を宣言する
    • 関数を複数の定義に分ける
    • 型安定なコードを書く
    • 変数の型が変化しないようにする
    • コア関数を分ける
    • 配列はメモリの順番に列ベースでアクセスする
    • 返り値を事前にメモリ割り当てする
    • ドット演算子を使う
    • スライスのViewを使うことを検討する
    • I/Oに対する文字列補間を避ける
    • Depreciation Warningを修正する
    • 細かいTips
    • パフォーマンス向上のためのマクロ
  • 参考資料
  • MyEnigma Supporters

はじめに

以前、

MATLABのコードの高速化手法や

myenigma.hatenablog.com

Pythonコードの高速化の手法を紹介しましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

今回は、下記の公式記事を元に、

Juliaのコードを高速化する方法をまとめたいと思います。

docs.julialang.org

 

Juliaは普通に使用しても十分高速ですが、

下記のTipsを利用することで、

より高速化することができます。

 

Juliaという言語そのものに関しては、

下記の記事を参照ください。

myenigma.hatenablog.com

  

続きを読む

オンライン上の数値演算・解析系のPythonチュートリアルScipy Lecture Notesを読んで学んだこと

目次

  • 目次
  • はじめに
  • ツールやワークフローを使った科学技術計算
  • プログラミング言語 Python
  • NumPy: 数値データの作成と処理
  • Scipy: 高水準の科学技術計算
    • scipy.io
    • scipy.optimize
    • scipy.interpolate
  • 参考資料
  • MyEnigma Supporters

はじめに

下記のScipy Lecture Noteという、

オンライン上の数値演算・解析系のPythonチュートリアルが

素晴らしかったので、

読んで心に残ったことをメモしておきたいと思います。

 

続きを読む