numpy覚え書き

行列の定義

>>> A = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> A
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

行列の転置

>>> A.T
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])

行列式

>>> np.linalg.det(A)
6.6613381477509402e-16

↑の読み方: 6.66.. × 1016

逆行列

>>> np.linalg.inv(A)
array([[ -4.50359963e+15,   9.00719925e+15,  -4.50359963e+15],
       [  9.00719925e+15,  -1.80143985e+16,   9.00719925e+15],
       [ -4.50359963e+15,   9.00719925e+15,  -4.50359963e+15]])

固有値固有ベクトル

内積

np.dot(v1,v2)

外積

np.cross(v1,v2)

Pythonコードの中でシェルを使う

Pythonスクリプトの中からシェルのコマンドを呼び出して使う。

$ python
>>> import commands
>>> commands.getoutput("<任意のコマンド>")

ネットワーク関連のコマンド覚え書き

ゲートウェイのIPを調べる

$ route -n

IPアドレスMACアドレス等を調べる

$ ifconfig

同じLANに接続されているコンピュータのIPアドレス一覧を取得する

# arp-scan -I <ネットワークデバイス(wlan0等)> -l

コンピュータがどのLANに接続されているのか確認する

$ iwconfig

Pythonでリストの中身が勝手に変わってしまう時は

Python2.7

Pythonのあるリスト(Aとする)に別のリスト(Bとする)をアペンドすると、アペンドしたリスト(B)の変更がアペンド先のリスト(A)の中身に影響を与えることがある←よくわかってないです

>>> listA = ['A']
>>> listB = ['B']

>>> listA.append(listB)
>>> listA
['A',['B']]

>>> listB.append('C')
>>> listB 
['B','C']
>>> listA
['A',['B','C']] ← これ

これを回避するためには、copyモジュールのdeepcopy関数を使うと良いらしい。

>>> import copy

>>> listA = ['A']
>>> listB = ['B']

>>> listA.append(copy.deepcopy(listB)) ← ここで使います
>>> listA
['A',['B']]

>>> listB.append('C')
>>> listB 
['B','C']
>>> listA
['A',['B']] ← listBの変更の影響を受けなくなった

git,GitHubの便利なコマンド覚え書き

  • ワークツリー上での削除をGitHubに反映させる
    $ git commit -aの後$ git push

  • 直前のcommitのコメントを編集する
    $ git commit --amend

  • 今までの一連の変更内容を確認する
    $ git log -p

  • commitする前の変更を取り消す
    $ git checkout HEAD .

pythonのunittestの使い方

pythonのunittestモジュールを用いることで、関数のテストを行う

対象となるコード(target.py)

def myadd(a,b):
    return a+b

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

これをテストするコード(test.py)

#coding:utf-8
import unittest
from target import myadd
from target import mypow

class TestTarget(unittest.TestCase):

    def test_myadd(self):
        # 関数myaddのテスト
        input_1 = 2
        input_2 = 3
        expected = 5 # 期待される結果
        result = myadd(input_1,input_2)
        self.assertEqual(result,expected) # 結果が等しいかどうか確かめる

    def test_mypow(self):
        # 関数mypowのテスト
        input_1 = 2
        input_2 = 3
        expected = 8 # 期待される結果
        result = mypow(input_1,input_2)
        self.assertEqual(result,expected) # 結果が等しいかどうか確かめる

if __name__=="__main__":
    unittest.main()

assertEqual():結果が等しいかどうか確かめる
assertTrue():結果が真かどうか確かめる
assertFalse():結果が偽かどうか確かめる

ROSでワークスペースとパッケージを作る

ワークスペースの作り方

ROSのワークスペース(catkin_ws)を作成する

$ mkdir -p ~/catkin_ws/src  
$ cd ~catkin_ws/src
$ catkin_init_workspace  
$ catkin_make
$ source ~/catkin_ws/devel/setup.bash (この行は~/.bashrcの最後に追記しておくとよい)

これでワークスペースが作成できる

パッケージの作り方  

ワークスペース中に新しいパッケージを作成する

$ cd ~/catkin_ws/src
$ catkin_create_pkg <パッケージ名> rospy roscpp std_msgs
$ cd ~/catkin_ws
$ catkin_make
$ source ~/catkin_ws/devel/setup.bash

これで自作パッケージを使うことができるようになる