R言語 入門(文法)

はじめに

R言語の入門として、基礎的な文法を追っていく。

環境

ここからWindowsのバイナリのインストーラをダウンロード。

Download R-3.5.1 for Windows. The R-project for statistical computing.

実行(およびデモの実行方法)

インストールしたRを実行すると、ExcelのようなWindow in Window(このアプリの形式を何ていったっけ?)で、 コンソールがでてくるので

> demo()

と入力すると、予めインストールされているデモンストレーションのリストが 表示される。この各デモを実行するには(例えばgraphicsパッケージのJapaneseを起動したい場合)

> demo(Japanese, package="graphics")

と入力すると以下のようなデモが立ち上がる。 f:id:kcha:20180915172645p:plain

代入

数値、ベクトルの変数への代入は<-を使う。左から右への代入->もできる。
ベクトルの作成にはc()関数を使う。

> x = c(10.4, 5.6, 3.1, 6.4, 21.7)
> x
[1] 10.4  5.6  3.1  6.4 21.7
> c(x, 0, x) -> y
> y
 [1] 10.4  5.6  3.1  6.4 21.7  0.0 10.4  5.6  3.1  6.4 21.7

(ベクトルの中にベクトルを入れることも可能)

ベクトルの算術計算

ベクトルの四則演算も出来て、ベクトル同士の次元?が等しくなくても動く(警告は出る)。

> y
 [1] 10.4  5.6  3.1  6.4 21.7  0.0 10.4  5.6  3.1  6.4 21.7
> y * 2 -> yy
> yy
 [1] 20.8 11.2  6.2 12.8 43.4  0.0 20.8 11.2  6.2 12.8 43.4

> y
 [1] 10.4  5.6  3.1  6.4 21.7  0.0 10.4  5.6  3.1  6.4 21.7
> x
[1] 10.4  5.6  3.1  6.4 21.7
> x + y
 [1] 20.8 11.2  6.2 12.8 43.4 10.4 16.0  8.7  9.5 28.1 32.1
 警告メッセージ: 
 x + y で: 
   長いオブジェクトの長さが短いオブジェクトの長さの倍数になっていません 

以降、続く(はず)

dB形式の変換

はじめに

ある本で見かけた数式をコードにおこす練習。(兼ブログ練習)

数式

線形値(dB形式が対数であるのでその対称としてこう呼称する)Nは次式によりdB形式に変換される。
 B[dB] = 10log_{10}(N)
逆にdB値Bから線形値への変換は
 N = 10^{B[dB] / 10}
となる。コード(python)は

import math

def from_decibel(b):
    return 10 ** (b / 10.0)

def to_decibel(N):
    return 10 * math.log10(N)

print("10 dB: " + str(from_decibel(10))) # 10 dB: 10.0
print("20 dB: " + str(from_decibel(20))) # 20 dB: 100.0
print("30 dB: " + str(from_decibel(30))) # 30 dB: 1000.0
print("4000 is " + str(to_decibel(4000)) + "dB")

増幅器の利得係数が100の場合、20dBの利得がある。
 10log_{10}(100) = 10 \times 2 = 20[dB]

AWS入門中

はじめに

AWSのアカウントを作成したので、チュートリアルを行いながら、忘れやすそうな事柄についてメモしておく。(リンクも張っておく)

クラウドでの Linux 仮想マシンの起動方法 – AWS

 

鍵の保管場所

Windows

チュートリアルの推奨通り、 

C:\user\{ユーザー名}\.ssh\MyKeyPair.pem

にキーペアを保存。.sshフォルダを作るには".ssh."とフォルダ名の最後にドットを追加すると先頭ドットが可能になる。

Mac

ダウンロードするキーペアを MyKeyPair.pem というファイル名で  ~/.ssh ディレクトリに保存。ダウンロードしたら chmod 400 でRead権限を自分のみに変更する。

インスタンスへの接続(SSH)

Windows

Git for Windowsをデフォルト設定でインストールする。(Bashを使うため?既にインストールしてあった。)デスクトップ上右クリックメニューにGit Bash起動があるのでそれを使う。

SSHでのインスタンス接続コマンドは、

ssh -i 'c:\Users\ユーザ名\.ssh\MyKeyPair.pem' ec2-user@{Instance's_public_IP_Addr}

pemファイルは上記のキー保管場所、ユーザ名は「ec2-user」でよい(最初、AWSのアカウント名かと思った)。インスタンスへの接続切断はexitで。(切るだけなのでshutdownではない)

Mac

Macの場合、ターミナルからデフォルトのSSHでアクセスする。

ssh -i ~/.ssh/MyKeyPair.pem ec2-user@{Instance's_public_IP_Addr}

他はWindowsの時と同様。

インスタンスの削除

EC2コンソールの Action > インスタンスの状態 > 削除 で。(リストにはterminated状態で残る。)

Python学習(書籍Fluent Pythonより)

はじめに

Pythonの学習としてこの本↓の special methods のオーバーライドを試してみる。
amzn.asia

ソースコード

写経したコードは以下のとおり。__init__に関しては特筆する必要はないでしょう。(自分には必要だけれど)

from math import hypot

class Vector:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    def __repr__(self):
        return 'Vector(%r, %r)' % (self.x, self.y)

    def __abs__(self):
        return hypot(self.x, self.y)

    def __bool__(self):
        return bool(abs(self))

    def __add__(self, other):
        x = self.x + other.x
        y = self.y + other.y
        return Vector(x, y)

    def __mul__(self, scalar):
        return Vector(self.x * scalar, self.y * scalar)

v1 = Vector(2, 4)
v2 = Vector(2, 1)
print(v1 + v2) # Vector(4, 5)
v = Vector(3, 4)
print(abs(v)) # 5.0
print(v * 3)  # Vector(9, 12)
print(abs(v * 3)) # 15.0

各メソッドの機能

__repr__

offcial string representationとある。ソースコードにもあるprintなどで表示される表現を規定する、ってことでいいんでしょうか。(__str__()は文字列型へのデータ変換?なのでこれとは別。)

__abs__

組み込み関数abs(object)で呼ばれた時の動作。

__bool__

truth value testingとあるので、if文の条件に使うのか。

__add__ , __mul__

それぞれ算術演算(+, *)の時の動作。乗算はVectorに対するスカラー乗算。(内積はnumpyに倣ってdot()とか定義したほうがいいでしょうか。)

math.hypot()

なんだこれ、ってことでリファレンス。
9.2. math — Mathematical functions — Python 3.7.0 documentation
Return the Euclidean normとあり、まんまsqrt(x*x + y*y)と書いてあるのでベクトルの長さですね。

リファレンス

上記の特殊関数を調べるのに参考にした。
3. Data model — Python 3.7.0 documentation

追記

このページも結構良さそう。
特殊メソッド名 - Dive Into Python 3 日本語版

メモ:Go langのインストール

インストール記録

Goをインストールしたので、その時の操作の記録。(Go Langのインストールページを見ればいいのだが、いちいち見に行くのが面倒なのと指示通りに設定したか確定できないため)

 

手順

ダウンロードしたmsiファイルを起動。デフォルトのc:\goにインストール。

インストーラがPATH環境変数をc:\Go\binに通してくれる、と書いているが、実際は%GOPATH%\binが設定され、GOPATH環境変数自体はc:\Users\my_account\goなので、新たにPATHにc:\Go\binを追加する。

 

インストール確認

%USERPROFILE%goに移動して(c:\Users\my_account\go)、src/helloディレクトリを作成&移動。サンプルのhello.goファイルを作成して、コマンドラインでhelloディレクトリから >go build & >hello で動作確認完了。

 

スクリプト実行(2018/9/4追記

下記より

qiita.com

> go run filename でコンパイル(exe出力)せずに実行可能。

ユニティちゃんを歩かせる

はじめに

ユニティちゃんを(既存のPrefabでなく)前後に移動させることができたので記録として残します。

参考サイト:

nn-hokuson.hatenablog.com

 

準備(配置や設定)

適当にオブジェクトを(真似して)配置します。(配置の際にVキーでの頂点スナップというのも少し覚えました。)

f:id:kcha:20180815102303j:plain

配置したのはユニティちゃんのモデルだけなので、以前のように配置して即動かせるという訳でなく。

まずunitychanという名前でAnimator Controllerを作成し、それを予めunitychanモデルにAdd ComponentしておいたAnimatorのController欄に入力。

f:id:kcha:20180815102622j:plain

アニメーターunitychanの状態遷移を以下のように設定。

f:id:kcha:20180815103500j:plain

遷移条件のためのパラメータSpeedを設定。最初、パラメータの追加の仕方が分からず頭が?になりました。公式サイトのチュートリアル重要。

アニメーターコントローラー - Unity

立ち、前進、後退のモーションにそれぞれユニティちゃんアセットのWaitと歩行前後をあてがって、(Foot IKもつけておきます)

f:id:kcha:20180815104611j:plain

f:id:kcha:20180815104614j:plain

f:id:kcha:20180815104617j:plain

状態遷移に条件(ここで前述したパラメータを使用。他に移動状態から立ち状態に戻る遷移もあります。)を設定し、Has Exit Timeのチェックを外します。外さないと状態遷移が即時発生しない?要勉強。

f:id:kcha:20180815104847j:plainf:id:kcha:20180815104844j:plain

 物理影響を与えるためRigidbodyを、地面を突き抜けないようCapsule Colliderをそれぞれアタッチ。

f:id:kcha:20180815102700j:plainf:id:kcha:20180815102649j:plain

Capsule Colliderの底の丸みのせいか、最初X,Z軸の回転を制約していなかった時、実行してしばらく経つとモデルがすっころがることに気付きました。)

f:id:kcha:20180815103933j:plain

 

スクリプト

ユニティちゃんの移動処理、およびAnimator ControllerのSpeedパラメータを操作するためのスクリプトをユニティちゃんにアタッチします。 

Study for Unity that Charactor moving forward and ...

 

ありゃ。 

youtu.be

(最初、移動方向は画面の左右X軸方向なので、Vector3.rightかと思ったのですがTransform.Translate()はrelativeTo変数がデフォルトだとモデル自身の軸になるので前後させるためにVector3.forwardに修正。)

Transform.Translate - Unity スクリプトリファレンス

 

完了

方向を修正して、前後に歩くようになりました。以上。

youtu.be

 

Numpyのrandom.choice()

はじめに

以下の本を進行中。4章に入って、後でも役に立ちそうな関数があったのでメモ。

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

 

random.choice()

本の中で大量の訓練データの中から少数のデータをランダムに抽出して学習するミニバッチ学習が行われており、それで使うのがnumpy.random.choice()

numpy.random.choice — NumPy v1.15 Manual

ただ本の中だとreplace引数をFalseにしていないので、少ない確率でデータの重複が起こる可能性が残っている?

gist6e3645fdfde5fc430527ec0c5705ef8e

 

pパラメータとか

出現確率を制御できるみたいなので後で調べる。