俺言語。

自分にしか理解できない言語で書かれた備忘録

【Python】例外処理のひな型

Pythonのエラー処理、毎度どうすればいいのか忘れてしまうので
よく使う形の覚え書き。

import warning
try:
    # エラーが起きそうな処理

Exception PermissionError as e:
    # warningを使うと標準出力に警告として出力できる.
    # e.argsにエラー内容が格納されている
    warning(e.args) 
    raise  # 呼び出し元に例外を返す

Exception Exception as e:
    # ほかのエラーはここで全部拾う
    raise  # 呼び出し元に例外を返す

【Python】配列から値と一致するインデックスを取り出す方法

ListとNumpyで使用感が違う。

Listはインスタンスのメソッドなのに対してnumpyはnumpyクラスのメソッド。 紛らわしい。。

Listの場合

list.index()を使用

a = [1, 2, 3, 4, 5]
b = a.index(3)  # 引数は1つのみ、listで渡せない

> 2

ndarrayの場合

np.where()を使用、引数はndarrayであることと、戻り値がタプルな点に注意

a = [1, 2, 3, 4, 5]  
a = np.array(a)  # 引数がndarrayでないと正しく動かない!?
c = np.where(a==3)

> (array([2], dtype=int64),)  # 戻り値はタプルなので注意!

【Python】配列同士の AND や OR, NOT を取る方法

Boolの配列同士でAND, OR, NOTを取る方法。

listとnumpyで方法が違うので覚え書き (こうゆう操作感の違いは何とかしてほしい...)

配列からTrueの部分だけ抽出するときなんかに便利。
oregengo.hatenablog.com

list の場合

戻り値はlist

a = [True, True, False, False]
b = [True, False, True, False]

# AND
c = a and b
> [True, False, True, False]

# OR
c = a or b
> [True, True, False, False]

# Not
c = not a
> False # 反転にはならない。配列全体が評価されてしまうので注意

numpy の場合

戻り値はndarray. 引数はlistも可

a = [True, True, False, False]
b = [True, False, True, False]

# AND
c = np.logical_and(a, b)
> array([ True, False, False, False])

# OR
c = np.logical_or(a, b)
> array([ True,  True,  True, False])

# Not
c = np.logical_not(a)
> array([False, False,  True,  True]) # ちゃんと反転できる

【Python】0次元のndarrayを1次元に変換

そもそも0次元が存在しているのが意味不明なんだけど、

a = np.array(0)

で作成したndarrayはshape=0のゼロ次元になってしまう。

これでは例えばconcatenateでほかのndarrayと結合しようとすると

b = np.zeros(10)
c = np.concatenate((a, b))
ValueError: zero-dimensional arrays cannot be concatenated

と出てエラーになる。

その時は

b = np.atleast_1d(b)

として1次元に変換してあげると結合可能になる。

【Python】CSV, Excelなどのデータ読み込み

いろいろなモジュールがあるので一度まとめ。

numpy.genfromtxt

メリット
  • numpyのメソッドなので他のモジュールをインポートする必要なし
  • 読み込んだデータ(戻り値)がndarrayなので使いやすい
  • csvモジュールみたいに一行ずつの読み込みではなく一度に処理可能.。
    • 読む込む行、列の指定も可能(読み込む行はnumpy1.16.0以降)
  • 書き出しのためのsavetxt()もあり便利。
    • savetxtで追記するにはファイルを追記モードで開いてハンドルをsavetxtへ渡すことで可能。
with open("text.txt", 'a') as f:
    np.savetxt(f, data)
デメリット
  • エクセル等のファイルには非対応
使い方
np.genfromtxt(data_path, delimiter="\t", skip_header=5, skip_footer=3, max_rows=5)

# delimiter : "," , "\t" など
# skip_header : エクセルで6行目から読み込ませたい場合は6
# skip_footer : 下から数えて何行分を読み込まないかを指定
# max_rows : 読む込む行数を指定,skip_footerと同時使用しないこと

csv

xlrd

pandas

メリット
  • データの加工や計算はメソッドがいくつか用意されていて便利
デメリット
  • インポートするモジュールの容量が大きく、配布には不向き(未検証につき推測)

設定まとめ

Bluetooth設定

かなりハマる。。
qiita.com
www.trifields.jp
mononichi.com

Bluetoohエラー時の対処法らしきもの

youness.net