意外
結婚式の動画のために自分の顔写真が必要で、Googleで自分の名前でイメージ検索していたらいろいろなものが発見される。
2006年7月の自分のブログエントリーにこんなことが書いてあった。
意外。最近しばらくJavaとPythonばっかり使っていて、多くの人に「JavaとPythonを使う人(っていうかJython使い)」と思われているのですが、その「最近」ってのは意外と短いようです。2004/09/03 13:24:52に書かれた日記にはこんなことが
あー、やっぱJavaを勉強しようかな(こうしてRubyの勉強がどんどん後回しになる)
そうか、しばらくDelphiを封印して、今までのDelphi+Pythonでの開発をJava+Pythonでやるようにしてみればいいのかな、Jythonもあるし。
なんて書いてあるので、Jython歴はまだ2年に達していないようです。意外意外。つまり今から2年後に僕がC#とかIronPythonとか使っていても何もおかしくないと言うことですね。っていうか2年前から「Ruby勉強しなきゃ」って言い続けてるのか自分…。
その3年後に自分がPythonではなくRubyの処理系をハックするクラスで授業を受け持つとか4年後にRubyのバグにパッチを書くことになるとか誰が予想できたであろうか。というわけで3年後にはまた何かぜんぜん違うことをしているんじゃないかなぁ、自分。っていうか自分が結婚したのが一番予想外か。
NumPyで行列を各column単位でイテレートするには
追記:結論としてはtransposeはデータのコピーをしないので気兼ねなく使ってOK。
まず「各column単位でイテレートしたい」が理解してもらいにくいので簡単に説明する。
ある行列matがあったとする。
In [125]: array([[1, 2], [3, 4]]) Out[125]: array([[1, 2], [3, 4]]) In [126]: mat = _
これを普通にイテレートすると各row単位でイテレートする。
In [139]: for v in mat: print v [1 2] [3 4]
で、そうじゃなくて[1 3] [2 4]とcolumn単位でイテレートしたい場合には、どうするのがスマートだろうか?もちろんtransposeしてしまうというのはひとつの手。
In [140]: for v in mat.transpose(): print v [1 3] [2 4]
だけど、array#transposeはイテレータではなく、行列をまるっとコピーしてしまう。将来的に行列が大きくなった場合のことを考えると、イテレートのためだけにtransposeはしたくない。追記:これは事実誤認でtransposeでコピーはされない。
shapeとrangeとスライシングで作るというのはもう一つの手だ。これは関数にまとめておくことができるので可読性をあまり損ねることなく使える。
In [141]: [mat[:, i] for i in range(mat.shape[1])] Out[141]: [array([1, 3]), array([2, 4])] In [142]: def iter_column(mat): .....: return (mat[:, i] for i in xrange(mat.shape[1])) .....: In [143]: for v in iter_column(mat): print v [1 3] [2 4]
で、疑問なのは、なんでこれがarrayのメソッドになってないのかということ。それともどこかにユーティリティ関数として置かれてたりするのかな?まだ見つけられていない。
iMovieで静止画の自動スクロールを調整したい場合
iMovieは写真をポンポンとドロップするだけで、画像の重要そうなところを判断して適当にスクロールするイフェクトをつけてくれます。素人に優しいシステムですね。だけどたまに自動判定に失敗するので調整したいことがあります。それがどこからいじれるのかわからなかったのでメモ。
クリップの上にマウスオーバーしたときには、上に切り取りマークのアイコン、中央にクリップの継続時間、下に歯車マークのアイコンが出る。歯車マークから色々な詳細設定などのメニューが出るのでこの中にあるかな?と思ってしまうのが罠。上の切り取りアイコンにマウスオーバーすると「クリップに切り取り、回転、またはKen Burnsエフェクトが適用されている」という旨のメッセージが。このアイコンをダブルクリックすると調整画面が出る。「Ken Burnsエフェクト」ってのが画像がスクロールするエフェクトの名前らしい。