0

python: natural sort for a list of strings

See this. The process is super simple.

  1. stack a set of strings into a list.
  2. define a function converts a string object to its corresponding int object.
  3. define a function runs through a list to extract numbers from strings.
  4. sort a list with the above function as sort key.
Advertisements
0

PyTorch: at evaluation/test phase

I got a runtime error at evaluation phase of my simple siamese network as RuntimeError: cuda runtime error (2) : out of memory at the line of executing forward pass.

Some comments on stackoverflow suggests to define x and y with volatile=True as

for x, y in dataloader:
    x = torch.autograd.Variable(x.cuda(), volatile=True)
    y = torch.autograd.Variable(y.cuda(), volatile=True)
    y_pred = net(x)
    loss = criterion(y, y_pred)
    ...

The above code further outputs user warning as UserWarning: volatile was removed and now has no effect. Use `with torch.no_grad():` instead, so I uses torch.no_grad as

with torch.no_grad():
    for x, y in dataloader:
        y_pred = net(x)
        loss = criterion(y, y_pred)
        ...

Finally, with torch.no_grad(), runtime error doesn’t occur!

0

モダンな C++ をはじめよう 第2版: C++98/03 から C++11/14/17 へ

モダンな C++ をはじめよう 第2版: C++98/03 から C++11/14/17 へ
Programming Place
Amazon Services International, Inc.

C++11, 14, 17で導入・刷新された新機能について詳しく説明してくれる本.超おすすめ.知らんけど使いたくなる機能がいくつかあった.

内容紹介(一部):
— プログラミング学習サイト「Programming Place」の作者による、新しい C++ への移行ガイド。

本書は、「モダンな C++ をはじめよう」の第2版です。
今回は、最新の C++17規格の新機能を追加したほか、初版で扱った内容も全面的に見直し、大幅な修正を行いました。

本書は、古い時代の C++ (C++98/03) を知っている方へ向けて、新しい時代の C++ (C++11/14/17) の新機能(の一部)を紹介しています。

C++11 以降の新機能は、C++プログラミングを容易にし、より良いスタイルのプログラムを実現するものです。C++ を使うのであれば、古い知識のままプログラムを書くことは、非常に勿体ないことです。

ただでさえ巨大だった言語仕様が、ますます大きくなってしまったことは事実ですが、すべてを理解する必要はありません。少しずつでも新しい機能を理解し、少しずつ日々のプログラミングに役立てていけば良いです。本書はその一歩となるべく、特に有用な新機能を選び出し、コンパクトに解説しています。

なお、分量の増大を避けるため、標準ライブラリに関する新機能や変更点は外しており、言語の文法機能に絞っています。

本書は、以下のコンパイラバージョンに対応しています。

– VisualStudio 2012 Update 5
– VisualStudio 2013 Update 5
– VisualStudio 2015 Update 3
– VisualStudio 2017 15.4.5
– gcc 4.7.3 ~ 7.2
– clang 3.3 ~ 5.0
(Amazonより)

0

Python: set

setsPython 2.3で追加され,2.6で撤廃された.
2.6以降は組み込み型のsetを使う.

listやnumpy.arrayを使っても似たようなことができそうだけど,集合は集合ということでsetを使った方が良い.

import random

if __name__ == "__main__":
    # define a ground set
    V = set(range(10))
    S = set([])
    K = 3

    while(len(S) < K):
        i = random.sample(V.difference(S), 1)[0]
        S.add(i)
        print S
0

Python: コールバック関数

関数の引数として呼ぶ関数をコールバック関数と呼ぶ.

C, C++と違い,Pythonのコールバック関数を使うのは非常に簡単ということが分かった.

ひとまず,コールバック関数をarithmetic.pyに保存.

# arithmetic.py
def add(a, b):
    return a + b

def sub(a, b):
    return a - b

def mul(a, b):
    return a * b

def div(a, b):
    return a / b

def add_3(a, b, c):
    return a + b + c

コールバック関数を呼び出すためには,関数ハンドラを定義して,関数ハンドラを通してコールバック関数を呼び出す.

# call_arithmetic.py

import itertools
from arithmetic import add, sub, mul, div, add_3

def handler(function, *arguments):
    print '    ', function.__name__, ':', function(*arguments)


def iterate_function(function):
    for a,b in itertools.product(xrange(5), xrange(3)):
        handler(function, a, b)

if __name__ == "__main__":
    print 'call each callback function'
    a = 10
    b = 3
    c = 1
    
    handler(add, a, b)
    handler(sub, a, b)
    handler(mul, a, b)
    handler(div, a, b)
    handler(add_3, a, b, c)
    
    print 'give a callback function to another function as an argument'
    iterate_function(add)

上記のコードを実行すると,以下のように出力される.
call each callback function
add : 13
sub : 7
mul : 30
div : 3
add_3 : 14
give a callback function to another function as an argument
add : 0
add : 1
add : 2
add : 1
add : 2
add : 3
add : 2
add : 3
add : 4
add : 3
add : 4
add : 5
add : 4
add : 5
add : 6

0

AndroidでARアプリ

GPS情報を基にした簡単な可視化を行うアプリをフルスクラッチで作ろうと思っていたんだけど,SDKを使うのが楽っぽい.

AR SDKの比較表を基に良さそうなのは以下のSDK

  1. DroidAR:
    1. Location-based, marker-basedの両方 (センサーベースがメイン)
    2. GPS, 磁気センサ,加速度センサ,ジャイロスコープ
    3. 一部(マーカ機能?)はC++
  2. Vuforia
    1. vision-basedっぽい
    2. rendering系はCで実装されている
    3. C++もサポートされているようだが,サイトに記載されているサンプルコードを見るとC#かもしれない
  3. Wikitude SDK
    1. Location-based, vision-basedの両方
    2. 実現したいアプリに近いサンプルがあったので,これでいけるっぽい
      1. Point-of-interest (POI): 地球上の特定の座標をマーカとする.Location-based ARに使う.
      2. POIデータの検索
      3. POIのデータの表示
    3. 開発,デバッグ,テストは無料.
    4. 配布&運用にはライセンス購入
0

C++のためのAPIデザイン

C++のためのAPIデザイン
Martin Reddy (著),ホジソン ますみ (翻訳),三宅 陽一郎 (監修)
ソフトバンククリエイティブ

タイトルとは異なり,C++に限らないAPIの設計に関する話も含まれている.必読の一冊と言える.と固く書いてみたけど,卒論レベルのプログラムでも,この本を読んでから書いた方が良いと思う.

内容: 自由度の高い言語C++の可能性を引き出す、珠玉の12章。長期の運用に堪える安全なソフトウェア設計のために。(「BOOK」データベースより)