<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <channel rdf:about="http://python.blog.shinobi.jp/RSS/100/">
    <title>Py淡 (PyTan)</title>
    <link>http://python.blog.shinobi.jp/</link>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://python.blog.shinobi.jp/RSS/" />
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
    <description>Python, Python, Python!
In the spirit of &amp;quot;import antigravity&amp;quot;</description>
    <dc:language>ja</dc:language>
    <dc:date>2015-07-16T17:55:01+09:00</dc:date>
    <items>
    <rdf:Seq>
      <rdf:li rdf:resource="http://python.blog.shinobi.jp/panda3d/numpy_texure_panda3d" />
      <rdf:li rdf:resource="http://python.blog.shinobi.jp/geany/geany1.25%20is%20out-overview" />
      <rdf:li rdf:resource="http://python.blog.shinobi.jp/python/numpy-linear-interpolation" />
      <rdf:li rdf:resource="http://python.blog.shinobi.jp/panda3d/blender_yabee_panda3d" />
      <rdf:li rdf:resource="http://python.blog.shinobi.jp/sublime/panda3d%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9Fpython%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E7%94%A8%E3%81%AEs" />
      <rdf:li rdf:resource="http://python.blog.shinobi.jp/sublime/sublime_with_googlejapaneseinput" />
      <rdf:li rdf:resource="http://python.blog.shinobi.jp/python/np.ones_like-%20np.zeros_lik" />
      <rdf:li rdf:resource="http://python.blog.shinobi.jp/python/matplotlib2clipboard" />
      <rdf:li rdf:resource="http://python.blog.shinobi.jp/bibtex-manager/making_bibtex_manger2" />
      <rdf:li rdf:resource="http://python.blog.shinobi.jp/bibtex-manager/making_bibtex_manger1" />
    </rdf:Seq>
    </items>
  </channel>

  <item rdf:about="http://python.blog.shinobi.jp/panda3d/numpy_texure_panda3d">
    <link>http://python.blog.shinobi.jp/panda3d/numpy_texure_panda3d</link>
    <title>Using buffer protocol to dynamically texture with 2D numpy array in Panda3d</title>
    <description>



I followed this official blog post &amp;quot;Buffer protocol support&amp;quot; and came up with a short example of simple video player in panda3d using numpy 2d arr...</description>
    <content:encoded><![CDATA[<script src="https://gist.github.com/i-namekawa/fceb859e062f34299f38.js" type="text/javascript"></script>
<br />
<br />

<p>I followed this official blog post "<a href="https://www.panda3d.org/blog/buffer-protocol-support/" title="">Buffer protocol support</a>" and came up with a short example of simple video player in panda3d using numpy 2d array as texture. The trick was to use <code>setRamImage</code> on Texture object. To do that, we have to setup the memory layout using&nbsp;<a href="https://www.panda3d.org/reference/1.9.0/python/panda3d.core.Texture#a91e16d5a2ae3ad8d4db7cc82f3d31108" title="">setup2dTexture</a> method.</p>
<code> setup2dTexture ( int x_size, int y_size, Texture::ComponentType component_type, Texture::Format format ) </code> <br />

<p><a href="https://www.panda3d.org/reference/1.9.0/python/panda3d.core.Texture#ab4e88c89b3b7ea1735996cc4def22d58" title="">Texture format</a> and <a href="https://www.panda3d.org/reference/1.9.0/python/panda3d.core.Texture#a81f78fc173dedefe5a049c0aa3eed2c0" title="">Texture componentType</a> need to be set correctly. By try and error, I figured that the combination of T_unsigned_byte and <em>F_luminance</em> works for 8 bit gray scale image.<br />
<br />
<a target="_blank" href="//python.blog.shinobi.jp/File/numpy_texture.png" title=""><img src="//python.blog.shinobi.jp/Img/1437036869/" alt="" /></a></p>]]></content:encoded>
    <dc:subject>Panda3d</dc:subject>
    <dc:date>2015-07-16T17:55:01+09:00</dc:date>
    <dc:creator>i-namekawa</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>i-namekawa</dc:rights>
  </item>
  <item rdf:about="http://python.blog.shinobi.jp/geany/geany1.25%20is%20out-overview">
    <link>http://python.blog.shinobi.jp/geany/geany1.25%20is%20out-overview</link>
    <title>Geany 1.25 is out! Overview plugin is now included in Geany-Plugins!</title>
    <description>There was an announcement in the Geany-Users&amp;amp;nbsp;email list&amp;amp;nbsp;that Overview plugin is now officially included in the Geany-Plugins!

Overview plug...</description>
    <content:encoded><![CDATA[There was an announcement in the Geany-Users&nbsp;email list&nbsp;that <strong>Overview</strong> plugin is now officially included in the Geany-Plugins!<br />
<br />
Overview plugin is a plugin that provides sublime text&nbsp;minimap&nbsp;like feature&nbsp;for Geany. I had built it from source before and tested as in <a href="http://python.blog.shinobi.jp/geany/overview_sublime_text_like" title="">this post</a>. Back then, it was a little buggy on Windows.&nbsp;<br />
<br />
Geany-Plugins can be downloaded from <a href="http://plugins.geany.org/downloads.html" title="">here</a>. The overview plugin requires Geany 1.25, so update your Geany before you install Geany-plugins.<br />
<br />
In my test, the issue with the preference dialog&nbsp;on Windows&nbsp;seems fixed.&nbsp;<br />
<br />
<br />
<br />
<img src="//python.blog.shinobi.jp/File/overview-preference.jpg" alt="" /> <br />
<br />
<br />
以前「<a href="http://python.blog.shinobi.jp/geany/overview_sublime_text_like" title="">Sublime TextのミニマップみたいなGeanyプラグインOverviewをウィンドウズでビルドしてみた。</a>」で紹介したOverviewプラグインがGeany1.25に合わせて正式にリリースされました。ダイアログの問題も解決済みのようですし、いい感じです。<br />
<br />
Sublimeにも慣れてきたんですが、Geanyもやっぱりいいなぁ。SublimeでGUIやイベントループがあるライブラリを使うとprintでデバックメッセージをプリントすると<a href="http://python.blog.shinobi.jp/sublime/sublime_python_geany_run" title="">遅延があるし、<span style="color: #333333; font-family: 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, Osaka, 'ＭＳ Ｐゴシック', 'MS PGothic', sans-serif; font-size: 15.0911989212036px;">REPLなら大丈夫</span></a><span style="color: #333333; font-family: 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', メイリオ, Meiryo, Osaka, 'ＭＳ Ｐゴシック', 'MS PGothic', sans-serif; font-size: 15.0911989212036px;">なんだけどもタブをいちいち閉じるのがいやなのでminimapの機能も追加されたことだし、</span>Geanyに戻っちゃおうかなぁなんて思ってしまいました。<br />
<br />
追記）GeanyでOverviewプラグインをウィンドウズで使うとスクロールが遅くなるバグがあるようです。Sublimeに舞い戻ってしまいました。<br />
<br />
]]></content:encoded>
    <dc:subject>Geany</dc:subject>
    <dc:date>2015-07-14T07:16:41+09:00</dc:date>
    <dc:creator>i-namekawa</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>i-namekawa</dc:rights>
  </item>
  <item rdf:about="http://python.blog.shinobi.jp/python/numpy-linear-interpolation">
    <link>http://python.blog.shinobi.jp/python/numpy-linear-interpolation</link>
    <title>Numpy: NaNをリニアインターポレーションして置き換える</title>
    <description>
def interp_nan(x):
    &#039;&#039;&#039;
    Replace nan by interporation
    http://stackoverflow.com/questions/6518811/interpolate-nan-values-in-a-numpy-array
  ...</description>
    <content:encoded><![CDATA[<div class="syntax">
<pre><span class="k">def</span> <span class="nf">interp_nan</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
    <span class="sd">'''</span>
<span class="sd">    Replace nan by interporation</span>
<span class="sd">    http://stackoverflow.com/questions/6518811/interpolate-nan-values-in-a-numpy-array</span>
<span class="sd">    '''</span>
    <span class="n">ok</span> <span class="o">=</span> <span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
    <span class="n">xp</span> <span class="o">=</span> <span class="n">ok</span><span class="o">.</span><span class="n">nonzero</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
    <span class="n">fp</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">ok</span><span class="p">]</span>
    <span class="n">_x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">isnan</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="o">.</span><span class="n">nonzero</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
    <span class="n">x</span><span class="p">[</span><span class="o">-</span><span class="n">ok</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">interp</span><span class="p">(</span><span class="n">_x</span><span class="p">,</span> <span class="n">xp</span><span class="p">,</span> <span class="n">fp</span><span class="p">)</span>
    
    <span class="k">return</span> <span class="n">x</span>
</pre>
</div>
<br />

<p>Site-packagesに入れていつでもインポートできるようにしておくと便利なスニペット。もともとは<a href="http://stackoverflow.com/a/6519053/566035" title="">Stackoverflow</a>で見つけたものほぼそのまま。ravelが何で入れてあるのかコメントで突っ込まれていて、確かになくとも動くのでとっておいた。</p>
<p>いつもと違うPCなんかでコーディングするときようの覚書。<a href="http://pygments.org/demo/2021338/" title="">Pygments</a>にもあげておいた。</p>
<h3>使用例</h3>
<div class="syntax">
<pre><span class="o">&gt;&gt;&gt;</span> <span class="n">toy</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="n">np</span><span class="o">.</span><span class="n">nan</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span><span class="p">])</span>
<span class="o">&gt;&gt;&gt;</span> <span class="n">interp_nan</span><span class="p">(</span><span class="n">toy</span><span class="p">)</span>
<span class="mi">0</span><span class="p">:</span> <span class="n">array</span><span class="p">([</span> <span class="mf">1.</span> <span class="p">,</span>  <span class="mf">1.</span> <span class="p">,</span>  <span class="mf">2.</span> <span class="p">,</span>  <span class="mf">3.</span> <span class="p">,</span>  <span class="mf">6.</span> <span class="p">,</span>  <span class="mf">9.</span> <span class="p">,</span>  <span class="mf">5.5</span><span class="p">,</span>  <span class="mf">2.</span> <span class="p">,</span>  <span class="mf">2.</span> <span class="p">])</span>
</pre>
</div>]]></content:encoded>
    <dc:subject>Python</dc:subject>
    <dc:date>2015-06-29T01:27:06+09:00</dc:date>
    <dc:creator>i-namekawa</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>i-namekawa</dc:rights>
  </item>
  <item rdf:about="http://python.blog.shinobi.jp/panda3d/blender_yabee_panda3d">
    <link>http://python.blog.shinobi.jp/panda3d/blender_yabee_panda3d</link>
    <title>BlenderとYABEEでPanda3d用にモデルを作る</title>
    <description>Panda3d用のモデル製作にはMayaが一番相性がいいらしいが月額123ドル？。フリーのBlenderでは以前はChickenというかなり完成度の高いエクスポーターがあったが古くなり使われてなく、現在はYABEEというプラグインが使われている。
Blenderのバージョンとの相性
Blenderの...</description>
    <content:encoded><![CDATA[<p>Panda3d用のモデル製作にはMayaが一番相性がいいらしいが月額123ドル？。フリーのBlenderでは以前はChickenというかなり完成度の高いエクスポーターがあったが古くなり使われてなく、現在はYABEEというプラグインが使われている。</p>
<h3>Blenderのバージョンとの相性</h3>
<p>Blenderのデベロッパーは頻繁にGUIや内部の仕様を変えるらしく、Chickenがメンテできなくなったのも多分そのため。なので、YABEEを使うときは組み合わせるBlenderのバージョンに注意する必要がある。 いまGithubにある<a href="https://github.com/09th/YABEE/archive/master.zip" title="">YABEE-master.zip</a>は<a href="http://www.panda3d.org/forums/viewtopic.php?f=2&amp;t=11441&amp;start=480" title="">Panda3dのフォーラム</a>によるとリビジョン１４（r14）に当たるらしいが、Readmeなどは<em>面倒なので</em>更新していなためr13.1と区別が付かないので注意。</p>
<br />

<p>一応Readmeには2.7もサポートとあり最新版の2.74でも一応使えたが、フォーラムを見て回ると、r13.1まではBlenderの2.68aと組み合わせて使う人が多いようなのでBlender公式サイトの<a href="http://download.blender.org/release/" title="">過去のバージョンのページ</a>から2.68aをダウンロードして使うのが安心かもしれない。</p>
<h3>YABEEのインストール</h3>
<p>GithubのReadmeがまったく内容がないので、最初戸惑うがYABEE-master.zipに同梱されている<a href="https://github.com/09th/YABEE/blob/master/YABEE_HowTo.pdf" title="">YABEE_HowTo.pdf</a>というちゃんとしたマニュアルがありインストール方法もある。マニュアルは多少古い。</p>
<p>お勧めはCtrl+Alt+UでBlenderのユーザープレファレンスをだして、Addonsタブを選び、Install from FileからYABEE-master.zipを指定し、eggにエクスポートするオプションにチェックする。ここでSave User settingsを押しておかないと次回起動にまたチェックすることになる。その場合、Addonsのタブの左CategoriesからImport-Exportを選ぶと探しやすい。</p>
<p></p>
<h3>YABEE使い方</h3>
<p>Blenderは手軽に美しいmaterialやテクスチャを生成できるCycles Renderが売りだと思うが、これで生成したゴージャスなmaterialやテクスチャはエクスポートできないようなのでデフォルトのBlender Renderですべて行う。悲しい。うまくBakeする方法があるのではないかと思うがBlender歴2週間なのでまだ良くわからない。</p>
<p></p>
<p>YABEEは残念ながらChickenに比べてエクスポートの機能は制限されるようだが、一応meshにイメージテクスチャをUVマッピングした状態でエクスポートできる。materialのエクスポートはかなり制限されるのでPandaの方でやり直しになる。ただし、materialが全くないとイメージテクスチャも無効になるのでデフォルトの materialくらいはつけておく。アニメーションもエクスポートできるようだけど今のところ必要ないので試していない。</p>
<p></p>
<p>エクスポートするときは対象のmeshを選択した状態でFileからeggのエクスポートを選択する。YABEEではライトはエクスポートされないのでPanda3dの方で適切に光を当てないと見え方が変わるので注意。私は、エクスポートする直前にSave asでBlenderファイルをコピーして、欲しい物以外すべて削除した状態でエクスポートを実行している。そうしないと要らないものもエクスポートされているような気がする。。。</p>]]></content:encoded>
    <dc:subject>Panda3d</dc:subject>
    <dc:date>2015-06-27T08:10:20+09:00</dc:date>
    <dc:creator>i-namekawa</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>i-namekawa</dc:rights>
  </item>
  <item rdf:about="http://python.blog.shinobi.jp/sublime/panda3d%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9Fpython%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E7%94%A8%E3%81%AEs">
    <link>http://python.blog.shinobi.jp/sublime/panda3d%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9Fpython%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E7%94%A8%E3%81%AEs</link>
    <title>Panda3dを使用したPythonスクリプト用のSublime Textビルドコマンド設定</title>
    <description>
{
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;quot;cmd&amp;quot;: [&amp;quot;C:/Panda3D-1.9.0/python/ppython.exe&amp;quot;, &amp;quot;$file&amp;quot;],
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;quot;file_regex&amp;quot;: &amp;quot;^[ ]*File \&amp;quot;(...*?)\&amp;quot;, line ([0-9]*)&amp;quot;...</description>
    <content:encoded><![CDATA[<blockquote>
<pre>{
&nbsp;&nbsp;&nbsp; "cmd": ["C:/Panda3D-1.9.0/python/ppython.exe", "$file"],
&nbsp;&nbsp;&nbsp; "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
&nbsp;&nbsp;&nbsp; "selector": "source.python",
&nbsp;&nbsp;&nbsp; "working_dir": "C:/Panda3D-1.9.0/bin"
}</pre>
</blockquote>
をppython.sublime-buildとして<code>PortableApps\sublime_text\Data\Packages\User</code>に保存。 私のsublimeはPortableApps.com経由なのでユーザー設定ファイルが変なところにある。普通は<code>C:\Users\ユーザー名\AppData\Roaming\Sublime Text 2\Packages\User</code>にあるはず。 これをTools&rarr;BuildSystemから選んで、Ctrl+Bでスクリプトが起動できるようになる。 OpenGLのエラーが出る場合は素直にビデオドライバの型番をしらべてメーカーから最新版をダウンロードする。WindowsUpdateのドライバーではNVIDIA FX580でエラーになった。]]></content:encoded>
    <dc:subject>Sublime</dc:subject>
    <dc:date>2015-06-16T23:10:35+09:00</dc:date>
    <dc:creator>i-namekawa</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>i-namekawa</dc:rights>
  </item>
  <item rdf:about="http://python.blog.shinobi.jp/sublime/sublime_with_googlejapaneseinput">
    <link>http://python.blog.shinobi.jp/sublime/sublime_with_googlejapaneseinput</link>
    <title>Google日本語入力とSublime Textの相性が悪い問題が解決！</title>
    <description>Sublime Textは開発者がオーストラリア人のJon Skinnerさんで、Gtkをベースにした独自のGUIでできているらしいのでやはり日本語に弱く、日本語IMEを使うと入力中の日本語がカーソルのある位置でインライン表示されずに画面左上あたりに表示されてしまう問題がある。

 

これはIME...</description>
    <content:encoded><![CDATA[Sublime Textは開発者がオーストラリア人のJon Skinnerさんで、Gtkをベースにした独自のGUIでできているらしいのでやはり日本語に弱く、日本語IMEを使うと入力中の日本語がカーソルのある位置でインライン表示されずに画面左上あたりに表示されてしまう問題がある。<br />
<br />
<img src="//python.blog.shinobi.jp/File/Sublime_GoogleJapaneseInput.jpg" alt="" /> <br />
<br />
これは<a href="https://github.com/chikatoike/IMESupport" title="">IMESupportという素晴らしいプラグイン</a>のお陰でちゃんとした位置に表示されるようになるんだけども、Google日本語入力では&rdquo;ひらがなモード&rdquo;から&rdquo;Direct inputモード&rdquo;にしてアルファベットを入力しようとすると入力モードの[あ]とか[A]とかのインライン表示が常にカーソルを追いかけて来てしまう。EmEditorなど日本語対応している他のエディタだとIMEの切替時や入力モードの切替時に一度表示されておしまい。<br />
<br />
MS-IMEならこの問題はないが、とてもおかしな変換ばかりするので使い物にならない。ATOKは好きでダウンロード販売で買ってずっと使っていたが、インストーラーのファイルがどっかに行ってしまい、再ダウンロードしようとしたら期限切れだそうで、バカバカしい。<br />
<br />
普段はプログラミングにアルファベットを入力することの方が多いがデフォルトのIMEを英語に設定しても必ず日本語のDirect inputモードに戻ってしまうので、このインライン表示が非常にうっとおしい。<br />
<br />
どうにかならないかとGithub上のIMESupportプラグインのコードを眺めていると割りと短い綺麗なコードでこれならハックできるかもしれないと思い色々やってみたら、二行コメントアウトするだけで見事に問題が解決出来てしまった。詳細は<a href="https://github.com/chikatoike/IMESupport/pull/18" title="">プールリクエスト</a>していますが、imesupportplugin.pyの162行目あたり、上の画像のifのブロックをコメントアウトするだけです。このファイルは通常は<code>C:\Users\ユーザー名\AppData\Roaming\Sublime Text 2\Packages\IMESupport</code>にあるはずです。<br />
<br />
Sublime TextのプラグインってPythonなのでとてもハードルが低かった。なんか作ってみたくなった。]]></content:encoded>
    <dc:subject>Sublime</dc:subject>
    <dc:date>2015-06-04T04:03:20+09:00</dc:date>
    <dc:creator>i-namekawa</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>i-namekawa</dc:rights>
  </item>
  <item rdf:about="http://python.blog.shinobi.jp/python/np.ones_like-%20np.zeros_lik">
    <link>http://python.blog.shinobi.jp/python/np.ones_like-%20np.zeros_lik</link>
    <title>np.ones_like, np.zeros_likeでboolアレイの初期化。</title>
    <description>覚書です。

array1 = np.zeros((w,h)) 

なんかであらかじめプリアロケーションしたゼロ行列を作ることはよくありますが、ブーリアンのときはどうやるとスマートなのかと思って調べました。


bool値で満たされた行列の初期化
私の場合、既にあるmyarrayと同じ次元のマスクが...</description>
    <content:encoded><![CDATA[覚書です。<br />
<br />
<code>array1 = np.zeros((w,h))</code> <br />
<br />
なんかであらかじめプリアロケーションしたゼロ行列を作ることはよくありますが、ブーリアンのときはどうやるとスマートなのかと思って調べました。<br />
<br />

<h3>bool値で満たされた行列の初期化</h3>
私の場合、既にある<code>myarray</code>と同じ次元のマスクが欲しい時は<br />
<br />
<code>mask = np.ones(myarray.shape, dtype=np.bool) * False</code> <br />
<br />
でFalseの部分を必要に応じて変えて急場をしのいでましたが、<br />
<br />
どうせ<code>myarray.shape</code>ってやるなら<a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.ones_like.html#numpy.ones_like" title="">np.ones_like</a>をつかって<br />
<br />
<code>mask = np.ones_like(myarray, dtype=np.bool) * False</code><br />
<br />
と書くべきだし、<code>ones_like</code>だとTrueの行列になるので<br />
<br />
<code>mask = np.zeros_like(myarray, dtype=np.bool)</code><br />
<br />
がスマートな方法っぽい。<br />
<br />
boolに限らずもっと一般的な方法としてはあまり使ったことなかったけど<a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.full_like.html" title="">np.full_like</a>というのがあって、第二引数の値で満たされた行列を作れる。<br />
<br />
<code>mask = np.full_like(myarray, Flase, dtype=np.bool)</code> <br />
<br />
または<br />
<br />
<code>mask = np.full_like(myarray, True, dtype=np.bool)</code> <br />
<br />

<h3>nanで満たされた行列の初期化</h3>
<br />
<code>np.full_like</code>を使うとnanで満たされた行列の初期化がスマートになります。<br />
<br />
<code>mask = np.full_like(myarray, np.nan)</code> <br />
<br />
でいけます。いままでは<code>np.ones</code>にnp.nanをかけていたけどこっちのほうがスマートですね。<br />
<br />

<h3>np.emptyはいつ使うのか</h3>
<code>np.zeros</code>に似た<a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.empty.html#numpy.empty" title="">np.empty</a>は初期化しないでメモリだけ確保するので、次元とデータ型は正しいが、確保されたメモリに残っているめちゃめちゃな値の行列ができる。全要素を上書きするのが確定している場合にはいいけど、忘れそうで危険なので使わないことにしている。そこまでパフォーマンスにこだわる状況っていまのところあまりない。]]></content:encoded>
    <dc:subject>Python</dc:subject>
    <dc:date>2015-05-22T17:26:34+09:00</dc:date>
    <dc:creator>i-namekawa</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>i-namekawa</dc:rights>
  </item>
  <item rdf:about="http://python.blog.shinobi.jp/python/matplotlib2clipboard">
    <link>http://python.blog.shinobi.jp/python/matplotlib2clipboard</link>
    <title>matplotlibの図をBMPとしてクリップボードにコピーする関数作った。</title>
    <description>よくデータ解析しているとmatplotlibでfigure(facecolor=&#039;w&#039;)にしてプロットした図をウィンドウズのSnipping toolでクリップボードにコピーして、パワーポイントに貼って、ノーテーションしたりするわけですが、これが何度も続くと面倒い。

ぐぐってみたらwxのバックエン...</description>
    <content:encoded><![CDATA[よくデータ解析しているとmatplotlibで<code>figure(facecolor='w')</code>にしてプロットした図をウィンドウズのSnipping toolでクリップボードにコピーして、パワーポイントに貼って、ノーテーションしたりするわけですが、これが何度も続くと面倒い。<br />
<br />
ぐぐってみたら<a href="https://github.com/matplotlib/matplotlib/issues/1987" title="">wxのバックエンドではツールバーにクリップボードにコピーするアイコンを追加するハック</a>があった。残念ながらこのパッチはマージされなかったようで、1.4.2でもクリップボードにコピーできない。<br />
<br />
で、やっぱり自分で作る。<br />
<br />
matplotlibのデフォルトのバックエンドはいまQt4Aggだと思うのでQtでやるにはどうしたら良いのかなとぐぐってみたら、<a href="http://stackoverflow.com/questions/1073550/pyqt-clipboard-doesnt-copy-to-system-clipboard" title="">こんな質問</a>があって、もしウィンドウズなら<code>win32clipboard</code>つかってみたら？という回答があったのでやってみた。<br />
<br />

<h3>使い方</h3>
なんかmatplotlibでプロットしたらこの関数を引数なしで<code>copy2clipboard()</code>としてやれば現在フォーカスがある図をBMPとしてクリップボードにコピーします。もしくはfigのインスタンスをfig=figure()のようにして取得してからプロットして、<code>copy2clipboard(fig)</code>のように使います。エディターにプロット用のスクリプトがあってなんどもプロットする場合、<code>tight_layout()</code>とかの後にこの関数を置いておくと一手間省けるという感じです。力技ですが、一応つかえます。<br />
<br />
<br />

<script src="https://gist.github.com/i-namekawa/5742922e80ece213897e.js" type="text/javascript"></script>]]></content:encoded>
    <dc:subject>Python</dc:subject>
    <dc:date>2015-05-20T07:41:49+09:00</dc:date>
    <dc:creator>i-namekawa</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>i-namekawa</dc:rights>
  </item>
  <item rdf:about="http://python.blog.shinobi.jp/bibtex-manager/making_bibtex_manger2">
    <link>http://python.blog.shinobi.jp/bibtex-manager/making_bibtex_manger2</link>
    <title>bibtexマネージャーを作ってみる。その2：wxPython3.0でwx.lib.agw.auiを使う。</title>
    <description> &amp;amp;nbsp; 
作り始めて３日目のスクリーンショット。現在コメントやICONのリソースのバッファ２１行を含めて２６５行。

さて、いろいろな空き時間にコーディングして、とりあえず使えるものが出来ました。

上にあるスクリーン ショットで、authorのところの下矢印はAuthorカラムでの昇順での...</description>
    <content:encoded><![CDATA[<a target="_blank" href="//python.blog.shinobi.jp/File/YABibtextManager1.png" title=""><img src="//python.blog.shinobi.jp/Img/1431101218/" alt="" /></a> &nbsp; <br />
作り始めて３日目のスクリーンショット。現在コメントやICONのリソースのバッファ２１行を含めて２６５行。<br />
<br />
さて、いろいろな空き時間にコーディングして、とりあえず使えるものが出来ました。<br />
<br />
上にあるスクリーン ショットで、authorのところの下矢印はAuthorカラムでの昇順でのソートを示しています。他のカラムをクリックしてタイトルでソートしたり yearでソートしたりできます。listmix.ColumnSorterMixinをつかったので、とっても楽に出来ました。<br />
<br />
右クリックメニューから選択中の論文でsublistを作って新しいタブに開いたり、PDFビュワーで一度に開いたりもできます。左端のPDFアイコンはbibtexの'file'タグにあるファイルパスが指定されているもの。<br />
<br />
あとは開いたタブを次回起動時に覚えているようにすれば最低限の自分が使えるものは完成です。wxPythonはやっぱり簡単でいいなぁ。<br />
<br />

<h3>wx.auiとwx.lib.agw.auiの違い</h3>
今まではwxPython2.8の安定版をづっと使ってきましたが、最近wxPython3系統が正式にリリースになったのでPython2.7.5とwxPython3.0.0.0で作っています。<br />
<br />
bibtexファイルを同時に複数開いた時に、それぞれをタブとして持ちたいので、これには以前カルシウムイメージングのROIドローイングソフト<a href="https://github.com/i-namekawa/Pymagor" title="">Pymagor</a>を作ったときに一度つかったAdvanced User Interface library （AUI）のwx.aui.AuiNotebookを使いました。<br />
<br />
AUIは、Advanced User Interface libraryの略で、見た目もスタイリッシュでかっこ良いwxの中のサブライブラリです。<br />
<br />
wxPython demoでauiをみてみるとwx.auiではなくってwx.lib.agw.auiを使っている場合が多い。どう違うんだっけと思って調べると、<a href="http://stackoverflow.com/questions/10187722/what-are-the-advantages-disadvantages-of-wxpythons-agw-aui" title="">この質問</a>によると<br />

<blockquote><code>wx.lib.agw.aui</code> is a re-implementation of <code>wx.aui</code> using only Python code.</blockquote>
だそうで、同じ機能+アルファをPython版で提供しているものらしい。基本的に<code>wx.lib</code>にあるものは全部Pythonバージョンらしい。<br />
試しに<code>wx.aui</code>で作り始めたアプリを<code>wx.lib.agw.aui</code>に差し替えたところ問題なく動作したので、ちゃんとAPIも互換しているらしいし、+アルファの部分が嬉しい。例えば<code>wx.aui.AuiNotebook</code>にはSetRenamableというメソッドがないが、agwの方にはこれがあるので、タブの名前をがダブルクリックで変えられるようにするのが一行でできてしまった。<br />
<br />
<code>wx.lib.agw.aui</code>のAGWとはAdvanced Generic Widgetsのことで、AUIを含めていろいろなちょっと高度なウィジェットが提供されています。APIが<a href="http://wxpython.org/Phoenix/docs/html/lib.agw.aui.auibook.AuiNotebook.html#lib.agw.aui.auibook.AuiNotebook" title="">wxPythonのバージョン３系（Phenix）のDoc</a>にあったのでメモ。見つけるの大変だったが、これで安心してwx.auiから乗り換えられそう。。wxPython3も今のところまったく問題がないです。]]></content:encoded>
    <dc:subject>bibtexマネージャーを作ってみる。</dc:subject>
    <dc:date>2015-05-09T00:28:39+09:00</dc:date>
    <dc:creator>i-namekawa</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>i-namekawa</dc:rights>
  </item>
  <item rdf:about="http://python.blog.shinobi.jp/bibtex-manager/making_bibtex_manger1">
    <link>http://python.blog.shinobi.jp/bibtex-manager/making_bibtex_manger1</link>
    <title>bibtexマネージャーを作ってみる。その１：BibtexParserを使う。</title>
    <description>
JabRefやCiteulikeを長く使ってきましたが、以下の機能が欲しいのでCiteulikeを補完するツールとして自分用bibtexマネージャーを作ってみようと思います。


欲しい機能



シンプルなJabRefのインターフェイスっぽいもの。
タブグループマネージャー機能。Bib mana...</description>
    <content:encoded><![CDATA[<br />
JabRefやCiteulikeを長く使ってきましたが、以下の機能が欲しいのでCiteulikeを補完するツールとして自分用bibtexマネージャーを作ってみようと思います。<br />
<br />
<br />
欲しい機能<br />
<br />

<ul>
<li>シンプルなJabRefのインターフェイスっぽいもの。</li>
<li>タブグループマネージャー機能。Bib managerから、いくつかの関連する文献をまとめて複数のタブとしてPDF Viewerで開いたり、グループを切り替えたりしたい。</li>
<li>ポータブルなアプリでDropboxに入れて置けると一番良い。</li>
<li>JabRefみたいに選択した論文をいろいろな雑誌のReferenceのフォーマットでワードに貼ればいいだけなリッチテキスト形式として出力したい。Citeulikeでは有料オプション。</li>
<li>bibtexのインポートをサポート（当たり前）</li>
<li>フリー</li>
</ul>
<br />
<br />
まずはすでに条件を満たすPythonでできたツールがないかググる。Pythonを使ったものはコマンドラインツールばっかり見つかる。<br />
<br />

<h1>biblio-py</h1>
yapbib: Yet Another Python BIBliography manager toolというコマンドラインツールがメインプログラム。bibextract.pyではLaTex中で引用した論文のリストとか得られるようだ。<br />
<br />

<h1>BibtexManager-Python</h1>
<a href="https://github.com/MasterOdin/BibtexManager-Python" title="">https://github.com/MasterOdin/BibtexManager-Python</a><br />
コマンドラインツール。bibtextエントリーをPretty printする感じ。<br />
<br />
<br />

<h1>BibReview</h1>
<a href="https://pypi.python.org/pypi/BibReview" title="">https://pypi.python.org/pypi/BibReview</a><br />
<a target="_blank" href="//python.blog.shinobi.jp/File/6b001fa1.png" title=""><img src="//python.blog.shinobi.jp/Img/1430907406/" alt="" /></a> <br />
<br />
やっと見つかったGtKアプリ。JabRefのインターフェイスとはかなり違う感じ。<br />
<br />
<span style="font-size: large;">Pybliographer</span><br />
<br />
<a target="_blank" href="//python.blog.shinobi.jp/File/c2dce031.png" title=""><img src="//python.blog.shinobi.jp/Img/1430907830/" alt="" /></a> <br />
<br />
<a href="http://pybliographer.org/Welcome" title="">http://pybliographer.org/Welcome</a><br />
<br />
GNOMEがターゲットのようなのでLinuxオンリーか。Windowsに移植するのもつらそう。見た目は好きなんだけど。<br />
<br />
<br />
<br />
結局なさそうなので自分で作る。<br />
<br />
計画としては、<br />
<br />
<br />
新しい論文を見つけた時はすでにウェブブラウザを開いてそのページを開いているわけで、これをCiteulikeに追加するまではCiteulikeのarticleインポーターが秀逸なので、これを使う。<br />
<br />
ただし、Citeulikeのインターフェイスはカスタマイズに限界があり自分好みにはできなかったので、JabRefっぽい使い勝手のフロントエンドGUIを慣れたwxPythonでサクッと最低限必要なものだけ作る。<br />
<br />
やはり自分の好きなPDFビュワーで論文を開いて、蛍光ペンツールを使ったりしたいのが、ウェブアプリケーションだと読みたい論文のPDFをPDFビュワーで開く部分が難しい。あとは孫引きしたりされたりしている関連する論文も一緒に開く場合が多いので、これをグループにして登録し、まとめて開いたりしたい。ここまではやればできる。<br />
<br />
欲を言えば、このグループの論文に対しての著者が同じとか、孫引きされているとかキーワードの相関が高いとかから関連性の順位を決定し、これでLibraryをソートできたりすると素晴らしい。Citeulike上のライブラリが大きくなってくるとすでに登録してある論文を見つけるのに苦労するので、この辺をできるようにするのが最大のモチベーション。<br />
<br />
CiteulikeからBibTexを手動できれば自動でライブラリをインポートしてCiteulikeのフロントエンドとして使いたい。bibtexの読み込みはいろいろライブラリがあるので、いいのを選ぶ。<br />
<br />
<br />

<h1>BibtexParser</h1>
<a href="https://bibtexparser.readthedocs.org/en/latest/" title="">https://bibtexparser.readthedocs.org/en/latest/</a><br />
<br />
これをつかってJabRefやCiteulikeからインポートする計画。<br />
<br />
pip install bibtexparser<br />
<br />
Pure pythonモジュールっぽいし、pipでインストール。<br />
<br />
<br />
<a href="https://bibtexparser.readthedocs.org/en/latest/tutorial.html" title=""> チュートリアル</a>を読むとbibtextの読み込みは簡単で、<br />
<br />

<blockquote>
<pre>import bibtexparser
with open('bibtex.bib') as bibtex_file:
    bib_database = bibtexparser.load(bibtex_file)
</pre>
</blockquote>
<br />
このbib_databaseオブジェクトをdumpしてbibtexファイルにエクスポートも簡単。<br />
<br />

<blockquote>
<pre>bibtex_str = bibtexparser.dumps(bib_database)</pre>
</blockquote>
<br />
bib_databaseクラスのメソッドをみてみるとentriesで各論文エントリーのメタデータがdictになった要素をもつリストとして格納されているようだ。<br />
<br />
しかし、エントリーをデータベースに追加したり削除、マージするAPIが用意されていない上、最終的にエクスポートするにはbib_databaseオブジェクトが必要なので編集できないのは困った。<br />
<br />
しょうが無いので<a href="https://github.com/sciunto-org/python-bibtexparser/blob/latest/bibtexparser/bibdatabase.py" title="">bibdatabaseクラスを定義しているソース</a>を覗き見するとクラスはえらく単純。<br />
<br />

<blockquote>
<pre>newBibDb = bibtexparser.bibdatabase.BibDatabase()

newBibDb.entries = sublist</pre>
</blockquote>
<br />
という感じで、自分でエントリー追加・削除したリスト（sublist）をつくって、新しくインスタンス化したbibdetabaseクラスオブジェクトのself.entriesを上書きしてやればいいと見通しがついた。これでdumpでエクスポートできるはず。<br />
<br />
<a href="http://stackoverflow.com/questions/13819019/add-element-to-a-bibtexfile-in-python" title="">この質問</a>をみるとpybtexというライブラリもあって、こっちでは一応追加・削除とかできそうだが、<a href="http://pybtex.sourceforge.net/" title="">http://pybtex.sourceforge.net/</a>の方のドキュメンテーションが未完成かつ古いのでメンテイナーがどっか入ってしまったパターンかもしれないので、ドキュメンテーションがかっこいいbibtexparserで頑張ることにする。<br />
<br />
<br />

<h3>ランチャー部分の実装</h3>
<br />
subprocessモジュールを使って簡単にグループタブを開く部分を実装してみる。<br />
<br />

<div class="syntax">
<pre><span class="kn">import</span> <span class="nn">subprocess</span>
<span class="kn">from</span> <span class="nn">time</span> <span class="kn">import</span> <span class="n">sleep</span>

<span class="k">def</span> <span class="nf">PDFopen</span><span class="p">(</span><span class="n">files</span><span class="p">,</span> 
            <span class="n">libraryPath</span> <span class="o">=</span> <span class="s">'C:</span><span class="se">\\</span><span class="s">Dropbox</span><span class="se">\\</span><span class="s">PathToYour</span><span class="se">\\</span><span class="s">PDFs'</span>
            <span class="n">execPath</span> <span class="o">=</span> <span class="s">r'C:\Path2\PDF-XChangeViewerPortable.exe'</span>
            <span class="p">):</span>
    
    <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">files</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="nb">list</span><span class="p">:</span>
        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">'The first arg should be a list containing more than one file path'</span><span class="p">)</span>
        <span class="k">return</span>

    <span class="n">P</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">execPath</span><span class="p">,</span> <span class="n">files</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
    <span class="n">sleep</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="c"># wait until the instance is ready for more files</span>

    <span class="k">for</span> <span class="n">pdf</span> <span class="ow">in</span> <span class="n">files</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
        <span class="n">P</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">execPath</span><span class="p">,</span> <span class="n">pdf</span><span class="p">])</span>


<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">'__main__'</span><span class="p">:</span>

    <span class="n">files</span> <span class="o">=</span> <span class="p">[</span>
    <span class="s">'Einstein1997.pdf'</span><span class="p">,</span>
    <span class="s">'Heisenberg2005.pdf'</span><span class="p">,</span>
    <span class="s">'Kandel2009.pdf'</span><span class="p">,</span>
    <span class="s">'Galileo1662.pdf'</span><span class="p">,</span>
    <span class="p">]</span>
    <span class="n">PDFopen</span><span class="p">(</span><span class="n">files</span><span class="p">,</span> <span class="n">libraryPath</span><span class="p">)</span>
</pre>
</div>
こんなのでとりあえずやりたいことができた。ぶっちゃけこれだけあれば十分・・・。<br />
さて、あとはGUIなので次回はwxPythonの話。]]></content:encoded>
    <dc:subject>bibtexマネージャーを作ってみる。</dc:subject>
    <dc:date>2015-05-06T18:02:36+09:00</dc:date>
    <dc:creator>i-namekawa</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>i-namekawa</dc:rights>
  </item>
</rdf:RDF>
