俺言語。

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

Python

【Python】listの掛け算は危険

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

グラフ枠(Spines)を一度描画した後に変更する方法。 グラフ枠はax.Spines{"Bottom"} ax.Spines{"Top"} ax.Spines{"Left"} ax.Spines{"Right"}に枠線のインスタンスがあり,色変更は ax.Spines{"**"}.set_color(色)太さ変更は ax.Spines{"**"}.set_linewidt…

【Python】matplotlibの手動で描画更新

matplotlibでアニメーションほど早い更新周期ではないものの,イベント(たとえばグラフをダブルクリック)でグラフを更新(変化)させたい場合など,グラフ更新の関数を実行してあげる必要がある。 最も一般的なのは canvas.draw()しかしこれがすごく遅い。 Fi…

【Python】win32clipboardが無いと言われる

新しい環境にpipでpywin32をインストールした時,過去に動いていたプログラムでImportError: DLL load failed when importing win32clipboard とエラーが発生。 (実際は日本語のエラー).dllにパスが通っていなのか、などいろいろ試したがexe版のpywin32で…

【Python】Pycharm + wx3 でエラー

PycharmのPython Console使用時に発生したエラー。おそらくbackednをpyqt4からwxに変更したことも関係あると思われる。C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2017.1\helpers\pydev\pydev_ipython\inputhookwx.py def inputhook_wx3()…

【Python】Pycharmアップデート後にPythonクラッシュ多発

Pycharmはずっと2016.3バージョンを使っていたが知らぬ間に2017.1という新バージョンに。機能もデバッグの高速化とPandasの可視化と魅力的だったため アップデートしたところ,前は普通に動いていたプログラムが立て続けに Pythonのcrashで動かず。。その時…

【Python】リスト内包表記の戻り値はリスト

知らなかった。連続で処理したものをリストでもっておきたい時に便利。 たとえば グラフウィンドウ内にgridspecを使って大量にaxesを設定する場合 row = 4 line = 4 gs = gridspec.Gridspec(row, line) ax = [fig.addsubplot(gs[num]) for num in row * line…

【Python】wxFormBuilderがwxPython3に対応できていない部分

wxFormBuilderで作ったGUIはwxPython2までしか対応していないせいか wxPython3だとエラーでうまく動かいない場合があり。変更(修正)が必要な項目のまとめ。【バージョン】 wxformbuilder:3.5.1-RC1(Unicode) wxPython-Phoenix: 3.0.3dev2749+f803d20 【要変…

【Python】Pycharm設定覚書き

・行数の表示 - ON ・メソッド間の区切り線 - ON ・スペースの可視化 - ON ・補完は大文字小文字を区別するか - None(しない) ・スペルチェック - OFF(しない) これがONだと適当な変数名にいちいちアラートが出る。 ・dict型を記述する際の配置 - Align on c…

【Python】cx_Freezeでexeファイルを作成した時のエラー

Python2.7から3.5に移行して,py2exeが使えなくなってしまったので代わりにcx_Freezeを使った時のエラー エラー発生時のキーワードは KeyError: 'TCL_LIBRARY' (何故かエラー再現できなくなってしまった…。)解決方法はsetup.pyに下記を記載すること import …

【Python】pipでwhlファイルをインストールするときのエラー

Gohlkeさんのサイトからwhlファイルをダウンロードしてきて手動?でインストールしようとした際に発生したエラー。エラーメッセージは「***.whl is not a supported wheel on this platform.」最初はpythonのバージョンとライブラリのバージョンが違うために…

【Python】グラフの外にテキスト表示 or 対数グラフ内の右隅にテキスト表示

グラフの外にグラフ情報を表示したい場合,または対数グラフ上にテキストを表示したい場合の方法。対数グラフ内にテキストを表示する場合,axes.text()では位置合わせが難しい。そういう場合はfig内での座標でテキスト表示するのが有効。 テキストの位置はグ…

【Python】numpy2次元配列でキーを使ったソートの方法

エクセルの並び替えの様に優先するキー(軸)を指定した並び替えが少しめんどくさい。 なぜそれ用の関数orオプションがないのだろうか…。方法としては キーにする軸のみargsortでソート後のインデックスを取り出す そのインデックスを使ってソートする前の配列…

【Python】GetWindowTextで取得できない文字列を取得する方法(win32api SendMessage WM_GETTEXT)

GetWindowTextで文字列が取得できない場合(他プロセスのコントロール文字列は取得できないらしい、意味不明)は指定のハンドルにメッセージを投げて文字列を取得する。投げるメッセージの定数はwinuser32.h内に記載されている。ハンドルはspy++等で調べること…

【Python】ウィンドウのタイトル文字列を取得する方法(win32api user32 GetWindowText)

win32apiのGetWindowTextを使ってウィンドウの文字列を取得する方法 1.EnumWindowsでトップレベル(アクティブという意味ではない)のウィンドウハンドルを取得 EnumWindowsは引数にコールバック関数が必要なのでコールバック関数を定義↓ 2.GetWindowTextLengt…

【Python】str.isdigitsは小数を判定できない罠

文字列が数値かどうか判定するstr.isdigits"."が含まれていると数値として判定してくれない。 str.isdigits("123") >> True str.isdigits("12.3") >> False 回避方法としては簡単なものはreplaceメソッドで"."を""に置換してしまうこと。 str.isdigits("12.3…

【Python】openCVのcv2.imshow()でエラー error: (-215) size.width>0 && size.height>0 in function cv::imshow

動画を読み込んで表示するプログラムでエラーが発生。 import cv2 src_m = cv2.VideoCapture("ファイル名") r, f = src_m.read() #←1フレーム読み込み cv2.imshow('title', f) #←フレーム表示 aviファイルはエラーが出ずに表示できるものとできない物があっ…

【Python】マウス左クリックした位置の画面座標を取得しコンソールに出力

win32apiの user32.GetCursorPosとuser32.GetAsyncKeyStateを組み合わせて 左クリックした位置の座標を取得し,コンソールに出力するプログラム下記は2回クリックして1回目が左上,2回目を右下とする矩形の座標を呼び出し元に返すプログラム # -*- coding: ut…

【Python】win32apiを使ってあるキーが押されたか検知する

関数名は user32.GetAsyncKeyState(vk_leftbutton) キーボードだけでなくマウスクリックも検知できる。戻り値が0x8000, 2進数だと16bitで 0b1000 0000 0000 0000 が返ってこれば押されてると判定。 押されていない時の戻り値は確か0だったはず。引数にはバ…

【Python】win32apiを使ってデスクトップ座標の取得

デスクトップ座標をwin32apiを使ってゲットするにはまずc言語での構造体をpython上で定義してあげる必要がある。今回は構造体用にクラスを作ってそのインスタンスを使う。 # 構造体を定義 class _pointer(ctypes.Structure): _fields_ = [ ('x', ctypes.c_lo…

【Python】FFmpegでのエンコード時に出たエラー Error while opening encoder for output stream #0.0

ネットを探すとどうやらH.264でエンコードする際によく出るみたいだけど,自分のところではwmvでも発生した。原因はおそらくソースの動画サイズが 495x697で奇数だったこと。FFmpegのオプションで -s 494x696 を指定したら上手くいった。 H.264でのエラーは…

【Python】matplotlibでy2軸のグラフに凡例を表示させる方法

y2軸のグラフを書いてそれぞれの軸の凡例をまとめて表示しようとした際,普通にlengedを呼ぶだけだとうまくいかない。グラフのハンドルと表示名を引数に与えてあげる必要がある。それでもはまったのがグラフのハンドルは通常リストなのでlegendにそのまま与え…

【Python】pytesseractを使ってみた

OCRモジュールのpytesseractのPython版を使ってみた。最初はtesseractを使ってみたけど何故かPythonが動作停止に。その前にまずpythonのtesseractはC++のラッパーなのでtesseract-OCRのインストールが必要。 github.comその次にPythonで下記を実行 import te…

【Python】ベクトルから要素の抽出(条件と一致したもの,Trueのインデックス)

Numpyで動作は確認しているがlistで動作するかは未確認 これは覚えておくと便利条件に合うものを抽出 a = numpy.array([1,2,3,4,5,6]) a = a[a%2 ==0] >>array([2, 4, 6]) #←条件が合う要素のみが返る 2016.11.13追記:np.whereでも同じ様に動作。np.whereは…

【Python】Numpyのndarrayは1xN行列とベクトルが全くの別物!

MATLABと大きく違う点を今更ながら気づいた…。 なんかおかしいな、やりづらいなと思っていた点ですっきりしたのでメモ。 numpy.arange(0,10,1) >> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) # ←これはベクトル a = numpy.arange(0,10,1) a.reshape(1,10) >> ar…

【Python】クリップボードからデータ取得

沢山の方法があってどれを使うといいのか迷ってしまう。 いくつか試したのでその結果のメモ。1. win32clipboard(pywin32の一部と思う) # ストリームを開く win32clipboard.OpenClipboard() # データ取得 win32clipboard.GetClipboardData() # ストリームを閉…

【Python】クリップボードにウィンドウをキャプチャ

matplotlibにはMATLABの様にグラフのハードコピー機能がないため, 自作するための下調べ。下記が参考になりそう。d.hatena.ne.jp pytan.hatenablog.com

【Python】Numpyで行列の連結

良く忘れるのでメモ。こちらが大変わかりやすい!qiita.com

【Python】matplotlibのフォントを変えた際にクリアする必要のあるキャッシュ

フォントのキャッシュを消去しないと新しいフォントが使えない。 キャッシュの場所は import matplotlib matplotlib.get_cachedir() でわかる。ここにある"fontList.cache"を消去すること。フォントの変え方はこちらを参考に。 qiita.com

【Python】threadを使った時のプチはまり

threadのインスタンスを作成して別スレッドを作成する際の プチはまり # 関数hogeに引数numで与えて別スレッドで動かす例 self.th = threading.Thread(target = self.hoge, name="th", args=(num,)) self.th.start() 引数の"args=()"はタプルが必要なので 一…

【Windows】Windows APIの便利なリスト

ctypesが使える様になってAPIを調べる機会が増加。 よいサイトを見つけたのでメモ。https://msdn.microsoft.com/ja-jp/windows/hh240557#10使い方は # user32.dllの場合,keybd_eventの場合 ctypes.windll.user32.keybd_event(**,0,0,0) # kernel.dllの場合 c…

【Python】py2exeで作成したプログラムで実行時にコンソールを表示させないようにする

setup.pyで windows = [ {"script" : "***.py",} ],"windows ="とすればコンソールは表示されなくなった。 "console ="とすればコンソール表示に戻る。 (exe化するpyファイルの拡張子を.pywにしても同様の効果があると どこかに書いてあったけどダメだった)

【Python】py2exeでexe化したときのエラー

py2exeを使ってexe化しようとしたときに出たエラー error: [Errno 2] No such file or directory: 'MSVCP90.dll'MSVCP90.dllをどこかのフォルダから探してきて python.exeがあるフォルダにコピーすれば動くようになった。 (たぶんPathが通っているフォルダ…

【Python】Numpyのndarrayを反転(逆順)にする

ndarrayだけじゃなくrangeでも使える方法。numpyの関数ならnumpy.fliplrを使えばいいんだけど 1次元の場合ちょっと工夫が必要で a = np.fliplr([ndarray])[0] てやらないとエラーがでる。なので逆スライスを使って a = ndarray[::-1] とした方がラク。ステッ…

【Python】Pandasデータフレームのインデックス(Row)を2重にする

qiita.com

【Python】 ドラッグアンドドロップを実装したファイル選択ダイアログ

正確にはファイル選択ダイアログではなく、FilePickerを使ってファイルを選択している。 import wx ## 本体のクラス class MyFileChooseDialog: def __init__(self, *dir): if len(dir) == 0: self.inidir = "" else: self.inidir = dir[0] def MyFileChoose…

【Python】Pythonpathの設定方法

Windowsの環境変数と同じようにPythonの実行環境用にPythonpathなるものが存在。 自作モジュールのパスをPythonpathに通しておけばimportや実行が楽になる。その設定方法1. sys.path.append("***")を使う → 一時的に登録するのみ。プログラム内で記述する分…

【MATLAB,C++,Python】C++でMATLABエンジンを呼び出す

ようやく動いたのでメモ。 目標はC++のDLLをPythonのctypesで読み込んでPythonからMATLABエンジンの使用。 (Matlabが2016以降であればPythonからコントロール可能なのでこんなめんどくさいのは不要) ポイント1.64bit環境(MATLABも)なのでプラットフォーム…

【Python】リスト内包表記を使って関数実行

引数にしたい対象がリストに入っている複数の要素だった場合, リスト内包表記を使うと1行で表記可能。たぶんfor文を使うより早いんだと思う(未検証) a = [0,1,2] #引数にするリスト [i**2 for i in a] #リスト内包表記 >>[1,4,9]関数を引数にする場合は i**…

【Python】Numpyを使ったプログラムをpy2exeでexe化する時のハマったポイント

コンソールでpython setup.py py2exeを実行すると コンソールに'libiomp5md.dllが見つからない’的なエラーが出る場合。setup.pyと同じディレクトリにNunpyフォルダにあるdllをコピーするとエラー回避可能。 しかしコピーはめんどくさいので何とかならないの…

【Python】matplotlibのbackend変更方法

matplotlibはグラフ等を出力するための 描画エンジンみたいのがたくさんある。 色々な用途や環境に対応するためらしい。画面出力用(Interactive Backendだっけ?)と画像ファイル等への出力用(Non-Interacktive Backendだっけ?) の2種類があり,Backendごとに…

【Python】SpyderでwxPythonを使ったプログラムの実行

Spyderでwxを使ったプログラムを実行すると PyNoAppError: The wx.App object must be created first!なんてエラーが。調べてみるとどうもSpyderはwxで書かれているようで 詳しくはわからないけど競合?衝突?が起こってるらしい。回避方法は実行するカーネル…

【Python】各モジュール,関数操作 逆引き表

■いろいろ 目的 モジュール,メソッド クリップボードにコピー xerox.copy() モジュールのインポート元 help(インポートしたモジュール名) フォルダの監視(作成,削除など) watchdog. フォルダ内のファイル一覧取得 glob.glob() フォルダ内のファイル一覧取得…

【Python】SpyderでIPthon Consoleが使用できなかった件

IDE選びを色々しながら開発を進めたため 簡単にはPython環境をアンインストールできず,PC内は良くわからない状態に。最後にSpyderにたどりついたものの, Ipythonコンソールが使えず、色々苦労したので覚書エラーコードは取り忘れ…。 SpyderのConsoleメニュ…

【Python】matplotlibよりサクサク動くらしいグラフ描画モジュール pyqtgraph

matplotlibはMATLABライクで操作が簡単だけど描画が遅い。リアルタイムのスペクトルアナライザみたいな物を作るときはこっちのモジュールが良さそう。但し,Qtベースで描画前にQtのインスタンスを作ったりmatplotlibに比べるとめんどくさそう。 yukara-13.ha…

【Python】ScipyをImportした時のエラー

Import Scipy とすると問題ないのに(正しくはエラーが出ないだけ) Import Scipy.ioとするとライブラリが見つからないと出るエラーの対処方法。 .io以外のモジュールでもエラーは発生した。 エラーはこんな感じ。 from ._ufuncs import * ImportError: DLL …

【Python】割算した時の小数点問題

pythonで割算をした時に起きたプチハマり。 [code language="python"] a = 1/16 >>a = 0 [/code] 小数点になるものだと勝手に期待していたのに何故かゼロ。 調べてみると小数を返すためには下記の様にしなきゃだめらしい。 [code language="python"] ① a = (…

【Python】Win32APIとctypesを使ってウィンドウを表示

WindowsのWin32apiをctypesで呼び出してウィンドウを表示する方法 [code language="python"] import cytpes ctypes.windll.user32.MessageBoxW(0, "Text", "Title", 0x00000040) [/code] 4番目の引数はメッセージボックスの形式と動作を指定 MSDNでは定数が…

【Matlab】複数台のRaspberryPIによる分散処理の可能性

多自由度の運動方程式を数値解法で解く際,少しでも計算時間を短くしたかったため手軽な分散処理を調査。 f = 4/(1+x^2)の[0 1]区間 積分が円周率の近似になるらしい方法でMatlab(PC)とRaspberryPi2台を比較(RaspberryPIはネット上の結果を参照 http://netbu…

【Python】PyscripterでPyQtのコード補完を有効にする方法

ツール → IDEオプション → Special packages の最後に、「PyQt4」を追加する。(自分の環境の場合、該当項目は、「os, wx, scipy, PyQt4」になった。) ツール → Edit Startup Scripts を選び、pyscripter_init.py の最後のあたりに、「from PyQt4 import QtCo…