Kohshi's Blog
2015/06/12
homebrewでpython開発環境(numpy, scipy, matplotlib, ipython & vtk)を整える
Homebrewのインストールはすでにされているとする。別HP参照のこと 間違いやすいのが、Macに既存で入っているpython(/usr/bin/python)とpip(/usr/bin/pip)を実は叩いているという可能性。 brewでpythonを入れる(/usr/local/bin/python)ことで一貫してsudoで実行せずにインストールできる(はず)。 # python、pipのインストール ```bash $ brew install python Warning: The post-install step did not complete successfully You can try again using `brew postinstall python` $ brew postinstall python ``` brew postinstall python時にPermission Denied ~/Library/Log/Homebrew/python/*が出ることがある。 その時は $ sudo chown -R
~/Library/Log/Homebrew/python/でオーナーを変えてあげる pipはpythonと一緒に入る。 postinstallせずにpipをすると、元からあるpython(/usr/bin/python)で 実行されて/System/Library/Frameworks/Python.framework/Versions/2.7/等に書き込みに行ってエラーになる。 postinstall pythonするとこれをbrewでインストールされた/usr/local/lib/python2.7/*とかに変えてくれる。 (/usr/local/lib/python2.7/site-package/以下にpipでインストールされたパッケージが管理されてる。) 以下でインストールされたpython/pipがともにbrewのものか確認 ```bash $ which python /usr/local/bin/python $ which pip /usr/local/bin/pip ``` この後のpip実行で以前にsudo pip xxxxをしているとadmin,wheel所有でファイルができている事があえうようでPermission Deniedになる(なった)。 その場合は、対象ファイルを消してpip reinstallとかして通常ユーザ権限でインストールしてやる。 pipのupdateもしておく。 ```bash $ pip install --upgrade pip ``` # numpy, scipy, matplotlib, ipythonのインストール 後はpackegeをインストールする。 ちゃんとやるならvirtualenvをインストールしてpython project毎にパッケージを 管理するのがほんちゃんらしい(rubyのbundlerみたいな感じだと思う)。 が、サーバにデプロイするわけでもないし、バージョンを気にするほど使い込めてないのでそのままインストールする。 ```bash $ pip install numpy $ pip install scipy $ pip install matplotlib $ pip install ipython ``` エラー(大抵 Permission Denied)が出る場合は(前述しているが、)以前にsudoでpipしてたりしてるとかで書き込み権限がadmin, wheelしかないやつ。 その時はめんどくさいが一応そのファイルを消してpip reinstall
してやる。 # vtkのインストール 最後にvtkをbrewからインストールする ```bash $ brew install --python --qt vtk ``` makeするので結構時間かかりますが・・。 これで完了!! 確認 ```bash $ ipython In [i]: import numpy In [2]: import scipy In [3]: import matplotlib In [4]: import vtk ``` で、エラーがでなければおk
ツイート
2014/08/28
C++ std::list, std::vector, std::dequeをまとめておく
# vector [cplusplus](http://www.cplusplus.com/reference/vector/vector/) arrayのように連続ストレージ系のコンテナ。 + * arrayと違って可変長。 * ランダムアクセス性が高い。 * endに対してのaddやremoveはlist,dequeに対して効率的 ー * 頻繁なallocationを防ぐために余分にメモリ確保される。 * (actual sizeに対してcapacityを大きく確保するから。ライブラリによってallocationタイミングは分かれるが、一般的いはlogインターバル) * end以外へのinsertやremoveはlist,dequeに対して遅い * iteratorの定常性というかconsistencyはlistに比べると低い # list [cplusplus](http://www.cplusplus.com/reference/list/list/) 固定処理時間でのinsert、erase(場所によらない)が特徴の双方向リストコンテナ + * insert, erase, moveが他のコンテナと比較して速い ー * ランダムアクセス性は低い、begin/endとかからたどる必要がある(はず)O(n) # deque [cplusplus](http://www.cplusplus.com/reference/deque/deque/) Double-Ended-Queueの略。Queueの一種なのでbeginとendからしか拡張できない。 + * arrayと違って、可変長 * listと違って、ランダムアクセス性は高い * vectorと違って分割されたChunk(+ランダムアクセス用の情報)に分けてデータを保存しているらしい。 * vectorと違って、endだけでなくbeginへのaddやremoveも効率的 ー * vectorと違って、連続的な保存は保証されない(ポインタ+オフセットでアクセスしちゃダメ) * beginやend以外へのinsert、removeは遅い * iteratorの定常性というかconsistencyはlistに比べると低い
ツイート
自分用Sublime Text Plugin/設定メモ
# Emacsライクな使い方にする為にST3のほうがおすすめな印象 * SublemacsPro * 基本的なキーバインドはこれで * IMESupport(Win) * Windowsの場合は日本語入力をインライン化する為に必要 * Alignment * Brackethighlighter * AutoFileName * OrigamiEmacs (ST2の場合のみ、ST3には同様の機能が入ってる) * ペインの分割とそのショートカット 参考サイト:http://xoyip.hatenablog.com/entry/2014/03/27/211804 * Markdown用 * OmniMarkupPreviewer Ctrl+Alt+Oでデフォルトブラウザでプレビューしてくれるらしいが、 Ubuntu?SublemacsPro?だからか効かななった。でも右クリックからプレビュー表示が可能なので問題なし * Trailing Spaces 改行になるスペースx2をハイライトしてくれてグー * monokai extended * Markdown Extended * KeyBinding ST3の時(Macでは不要だった) * ctrl+hのキーをleft_deleteに切り替える ``` { "keys": ["ctrl+h"], "command": "left_delete" }, // for markdown { "keys": ["shift+enter"], "command": "insert_snippet", "args": {"contents": " \n"}}, ``` * Preference追加した項目を晒す ``` "theme": "Flatland Dark.sublime-theme", "color_scheme": "Packages/Theme - Flatland/Flatland Dark.tmTheme", "flatland_square_tabs": false, "translate_tabs_to_spaces": true, "highlight_line": true, "draw_white_space": "all", ```
ツイート
2014/03/08
QCustomPlotで表示したグラフをマウスホイールズームやDragシフトする際の範囲を制限する
[QCustomPlotでマウスホイールズーム&Dragでシフト](http://kohshi.blogspot.jp/2014/03/qcustomplotdrag.html)で紹介したようにほんの数行加えるだけで、 表示領域を操作できるのだが、0原点だけはズームやシフトしたい場合にも固定したい場合は結構多い。 そういう時はどういう風にするかを紹介する。 [ここ](http://www.qcustomplot.com/index.php/support/forum/289)で書かれている内容だが、 まず、制限したいQCPAxisのrangeChangedシグナルにslotを接続する↓。 ```cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); mpHistogramBars = new QCPBars(ui.histogram->xAxis, ui.histogram->yAxis); mpHistogramBars->setPen(QPen(Qt::gray));// 色指定 mpHistogramBars->setBrush(QBrush(Qt::gray));// 色指定 ui.histogram->addPlottable(mpHistogramBars);// 追加 ui.histogram->setInteraction(QCP::iRangeDrag, true); ui.histogram->setInteraction(QCP::iRangeZoom, true); ui.histogram->axisRect()->setRangeDrag(Qt::Vertical); ui.histogram->axisRect()->setRangeZoom(Qt::Vertical); // yAxisRangeChanged()はslot connect(ui.histogram->yAxis, SIGNAL(rangeChanged(const QCPRange &)), this, SLOT(yAxisRangeChanged(const QCPRange &))); } ``` のようにしておいてRangeが変わったら、すなわちズームやシフトが発生したらyAxisRangeChangedが呼ばれるようにしておき、 yAxisRangeChangedの中で以下のようにRangeを再セットしてやる。 ```cpp void MainWindow::yAxisRangeChanged(const QCPRange &newRange) { ui.histogram->yAxis->setRange(0, ui.histogram->yAxis->range().upper);// y軸の下限を0に固定 } ``` 当然、マイナスの値にはしたくないという制限の場合には以下のようになる。 ```cpp void MainWindow::yAxisRangeChanged(const QCPRange &newRange) { if(newRange.lower < 0){ ui.histogram->yAxis->setRange(0, ui.histogram->yAxis->range().upper); } } ``` 常に下限を0にした場合こんな感じになる
ツイート
新しい投稿
前の投稿
ホーム
登録:
投稿 (Atom)