俺言語。

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

【Android】Pythonのnp.zeros相当な書き方

Python

np.zeros(10)
>array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

と書ける物は以下のようにするといいみたい。

Integer [] arr = new Integer[10];
ArrayList<Integer> myList= new ArrayList<>(Arrays.asList(arr));
Collections.fill(myList, 0);//fills all 10 entries with 0

【cmd】コマンドプロンプトからイベントログ出力と削除

一連の処理を.bat化して1クリックのみで処理できるようにした。


まずはイベントログの画面出力。

コマンドはwmic

ログの中身全てを出力すると画面上では見づらいので

ここでは作成時間とメッセージのみ出力

wmic ntevent where "(LogFile = 'system') get TimeGenerated, Message

->
Message                                 TimeGenerated
System ログ ファイルが消去されました。  20170824005734.400493-000


次にログの削除。これは管理者権限が必要。

コマンドはwevtutil

wevtutil cl system

これのみで削除完了。


こちらを参考にさせてもらった。感謝!
イベント ログを消去する
[Windows] wmic コマンドを使ってイベントログを表示する | インフラSEの運用・構築メモ

【Python】numpy ndarrayとmatrixの特徴 覚書き

MATLABからの移行組にはとっつき辛いところが多々あるnumpyの配列,

ndarrayの気付いた点まとめ。


numpyは基本、横ベクトル

xx.shape -> (n, ) はベクトル

x.shape -> (n,m) は配列

array([1, 2, 3])やarange(10)で作成されるのはベクトル

ベクトルは標記こそ横ベクトルだが向きは無い。

よってベクトル(1×N)を転置をしてもMATLABの様にN×1ベクトルにはならない。

ベクトルをイテレータとして使うと数値が一つずつ取り出せる。

e.q. np.range(3) -> 最初:1, 次:2, 次:3

配列をイテレータとして使うと 1×Nのベクトルが取り出される

e.q. np.range([[1, 2, 3], [4, 5, 6]]) -> 最初:[1, 2, 3], 次:[4, 5, 6]

よって配列をスライスする際はベクトルでスライスするか配列(1*N)でスライスするかで

挙動が変わるので注意

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

index1 = np.array([[0, 1, 2]])

data[index1, 0])

-> array([[1, 4, 7]]) # 1*3配列


index2 = np.array([0, 1, 2]) 

data[index2, 0])

-> array([1, 4, 7]) # ベクトル

【Python】listやndarrayの中身をエクセルに張り付けるためにクリップボードへコピー

listやndarrayの中身をエクセルに張り付けて検証や検討をしたい場合に有効。


肝になるのが

・リスト内容標記を使って数値を文字列にして末尾に改行コード\nを追加

・"".join(データ)で文字を結合

import pyperclip

def copy(data):
    temp = [str(i) + "\n" for i in data]
    pyperclip.copy("".join(temp))

    print("data was copied in clipboard")

クリップボードコピー用のモジュール、pyperclipを使って関数化し
リストからクリップボードコピーまで1行で処理可能にした。

【Python】グラフ枠(Spines)の色・太さ変更

グラフ枠(Spines)を一度描画した後に変更する方法。


グラフ枠は

ax.Spines{"Bottom"}
ax.Spines{"Top"}
ax.Spines{"Left"}
ax.Spines{"Right"}

に枠線のインスタンスがあり,

色変更は ax.Spines{"**"}.set_color(色)

太さ変更は ax.Spines{"**"}.set_linewidth(太さ)

で変更する。

問題は枠線(Spines)がAXESエリアのぎりぎり外側にいるため,

背景を保存する際や再描画エリアを指定する際に使う

ax.bboxでは範囲に含まれないこと。


解決方法として

ax.bbox.extended(縦?倍率,横?倍率)でax.bboxの範囲を少し広げてやる。

 問題点はAxesサイズが変わると拡張される面積も変わるためプログラム毎で調整が必要になってしまう。


ax.xaxis.get_tightbbox(ax.get_renderer_cache())でtickラベルを含むaxisのbboxを取得し,

 ax.bbox.union([結合したいbbox, 結合したいbbox])でbboxをつなげる。

 注意点はax.xaxis.get_tightbbox()がほんとにtightでtickラベルぎりぎりのbboxを返す。
 
 そのためtickラベルの桁数が変わる場合など簡単にエリアをはみ出すので注意。



グラフをダブルクリックしてグラフ枠を赤&太く -> 黒&細くを繰り返す。

def event_datacheck(self, event):
    if event.dblclick:

        if event.inaxes.spines["bottom"].get_edgecolor()[0] == 0:

            # 赤線を引く前にbgを保存
            # キーをイベントのaxesインスタンスにしてクリックされたaxesにbgを引き当て
            # key:axインスタンス value:bg
            self.ax_dict[event.inaxes] = event.canvas.copy_from_bbox(event.inaxes.bbox.expanded(1.1, 1.1))

            event.inaxes.spines["bottom"].set_color("red")
            event.inaxes.spines["top"].set_color("red")
            event.inaxes.spines["left"].set_color("red")
            event.inaxes.spines["right"].set_color("red")

            event.inaxes.spines["bottom"].set_linewidth(2)
            event.inaxes.spines["top"].set_linewidth(2)
            event.inaxes.spines["left"].set_linewidth(2)
            event.inaxes.spines["right"].set_linewidth(2)

            print("Axes was SELECTED")

        else:
            # イベント内のaxesに対応するbgを使って画面をbgに戻す
            event.canvas.restore_region(self.ax_dict[event.inaxes])

            event.inaxes.spines["bottom"].set_color("black")
            event.inaxes.spines["top"].set_color("black")
            event.inaxes.spines["left"].set_color("black")
            event.inaxes.spines["right"].set_color("black")

            event.inaxes.spines["bottom"].set_linewidth(0.5)
            event.inaxes.spines["top"].set_linewidth(0.5)
            event.inaxes.spines["left"].set_linewidth(0.5)
            event.inaxes.spines["right"].set_linewidth(0.5)

            print("Axes was RELEASED")

        event.inaxes.draw_artist(event.inaxes.spines["bottom"])
        event.inaxes.draw_artist(event.inaxes.spines["top"])
        event.inaxes.draw_artist(event.inaxes.spines["left"])
        event.inaxes.draw_artist(event.inaxes.spines["right"])

        # これで更新
        event.inaxes.figure.canvas.blit(event.inaxes.bbox.expanded(1.2, 1.2))
        # event.inaxes.figure.canvas.update() <- wxaggだと動かない