pythonでインスタンスのリストを作り、インスタンス関数に対して同一変数を与える方法等。
結論は、mapとlambdaを使うと便利ということ。
例として次のような、クラスを定義する。
class myclass:
def __init__(self,val):
self.val=val
def func(self,val):
return self.val==self.val
次のように動作する。
o=myclass(0)
o.func(0) → True
o.func(1) → False
これを、インスタンスのリストとする。
ol=[myclass(1),myclass(2),myclass(3)]
olのインスタンス全てに対してfunc(x)を呼ぶ時、forを使って次のように書ける。
for o in ol:
o.func(x)
上のままでは全く意味のない動作である。
(1)全ての結果をリストとして得たい場合、例えば次のように書ける。
rl=[]
for o in ol:
rl.append(o.func(x))
(2)一つでもTrueを返す場合何某かの処理をするという場合、例えば次のように書ける。
for o in ol:
if o.func(x):
<何某かの処理>
break
(breakが無ければ、Trueが複数返る場合はその回数だけ処理を行う。)
(3)全てがTrueの場合に処理する場合、例えば次のように書ける。
flag=True
for o in ol:
if not(o.func(x)):
flag=False
break
if flag:
<何某かの処理>
ここからが本題。
mapとlambdaを使用すると、forを使わなくても全てのインスタンスについてfuncを呼び出せる。
map(lambda o: o.func(x), ol)
以下は、それぞれ上記の例と同じ動作をするものである。
(1)
rl=list(map(lambda o: o.func(x), ol))
(2)
if any(map(lambda o: o.func(x), ol)):
<何某かの処理>
(3)
if all(map(lambda o: o.func(x), ol)):
<何某かの処理>
anyやallとmapを組み合わせる場合、
anyでは最初にTrueが返った段階で、以降のインスタンスのfunc(x)は実行されない。
allでは最初にFalseが返った段階で、以降の(略)。
これは、mapが生成される段階では、まだmapされた関数は実行されないということである。
最初の例のようにmapをリスト化する場合、その段階で全てに対してfunc(x)が実行される。
(追記)
mapとlambda以外に、リスト内包表記を使うこともできる。
(1)については、リスト内包表記を使うと、次のように書ける。
rl=[o.func(x) for o in ol]
同様に(2)は、
if any([o.func(x) for o in ol]):
<何某かの処理>
(3)は、
if all([o.func(x) for o in ol]):
<何某かの処理>
ただし、(2)と(3)は全てのインスタンスのfunc(x)が実行されることになる。
(1)についてはリスト内包表記の方が処理が速いようだ。
したがって、単純にリストを生成する場合、リスト内包表記の方が適しているだろう。
(2)と(3)のようにallやanyと組み合わせる場合、func(x)の処理が重くなると、mapとlambdaが有利になる・・・こともあると思う。
(anyの中でTrueが出る可能性が高い場合や、allでFalseの可能性が高い場合)
なんやかんや
気が向いた時だけ、すきなことを徒然と書くブログ
2020年5月15日金曜日
2014年6月23日月曜日
米国版ドラえもんはドラえもんか
日本でドラえもんを放映したテレビ朝日によると、子供向けアニメで暴力的、性的、差別的な描写を禁じる米国の放送基準により、ジャイアンがのび太を殴る場面やしずかちゃんの入浴シーンなどは短縮・削除される。
(日経2014/06/22)
ドラえもんのシーンで最も印象に残るのは、繰り返し見せつけられるジャイアンの暴力、スネオの自慢話、しずかちゃんの入浴シーンだ。
暴力と入浴シーンが削られたら、残るのはスネオだけではないか。
(日経2014/06/22)
ドラえもんのシーンで最も印象に残るのは、繰り返し見せつけられるジャイアンの暴力、スネオの自慢話、しずかちゃんの入浴シーンだ。
暴力と入浴シーンが削られたら、残るのはスネオだけではないか。
2014年5月5日月曜日
タブレット端末買いました
Nexus 7買っちゃいました。
スマホってのがどうも好きになれないので、こいつと携帯電話と(必要なら)モバイルwifiという構成でしばらく行こうかなと思います。
オフラインでもタスクとスケジュール管理ができて、オンラインならその同期とメールチェックとWebブラウジングができれば十分だと思うのです。
ホントは絶対に使いたくなかったLINEも始めてみましたよ(アカウントは携帯電話で作りました)。LINEできるようになったと友人に伝えたら、さっそく友だちとかグループとか教えてもらえました。
メールと電話で良いんじゃないの?と思いました。終わり。
じゃなくて、ネクサスくんの使い心地ですけど、2013モデルにしてみたんですが、このような形態のはKindlePWを持ってますけど、やっぱり比べると重いです。応答速いです。見やすいですが目は疲れます。なので、今まで通り読書にはPWを利用しつつ、ネクサスくんは手帳+αとして使えたら良いなって感じです。
とりあえず入れるアプリの方向性は、オフラインでも十分に使えるやつってことと、PC環境との親和性が高いこと。
GoogleカレンダーやGmailはまぁそのまんま使えそう。
Keepはどうだろうか、限定的な使い方なら使えないこともないって感じだろうか。
evernoteは結構使える予感。手書きメモにも十分活用できそうかと。
比較で入れてみたNoteAnytimeは投げ縄ツールの使いやすさでちょっとした図の作成に使えるかもと思いました。それだけなら他のツールで良いか?次の課題です。
IMEは結局プリインストールされてたiWnnで十分かなと思いました。
他に長時間録音用の適当なアプリ入れてみよう。evernoteの録音機能は通信量を食いそうなので、なるべく使わない意向で。
あと、この投稿もですが、bloggeroidは結構使えそう。必要十分な機能で使いやすい。
オフラインでメモ帳として色々と書きためて、 本来的な日記として使える。 適当にdraftとして投稿しとけばちょっとしたPCとの連携手段としても使える。優秀。
スマホってのがどうも好きになれないので、こいつと携帯電話と(必要なら)モバイルwifiという構成でしばらく行こうかなと思います。
オフラインでもタスクとスケジュール管理ができて、オンラインならその同期とメールチェックとWebブラウジングができれば十分だと思うのです。
ホントは絶対に使いたくなかったLINEも始めてみましたよ(アカウントは携帯電話で作りました)。LINEできるようになったと友人に伝えたら、さっそく友だちとかグループとか教えてもらえました。
メールと電話で良いんじゃないの?と思いました。終わり。
じゃなくて、ネクサスくんの使い心地ですけど、2013モデルにしてみたんですが、このような形態のはKindlePWを持ってますけど、やっぱり比べると重いです。応答速いです。見やすいですが目は疲れます。なので、今まで通り読書にはPWを利用しつつ、ネクサスくんは手帳+αとして使えたら良いなって感じです。
とりあえず入れるアプリの方向性は、オフラインでも十分に使えるやつってことと、PC環境との親和性が高いこと。
GoogleカレンダーやGmailはまぁそのまんま使えそう。
Keepはどうだろうか、限定的な使い方なら使えないこともないって感じだろうか。
evernoteは結構使える予感。手書きメモにも十分活用できそうかと。
比較で入れてみたNoteAnytimeは投げ縄ツールの使いやすさでちょっとした図の作成に使えるかもと思いました。それだけなら他のツールで良いか?次の課題です。
IMEは結局プリインストールされてたiWnnで十分かなと思いました。
他に長時間録音用の適当なアプリ入れてみよう。evernoteの録音機能は通信量を食いそうなので、なるべく使わない意向で。
あと、この投稿もですが、bloggeroidは結構使えそう。必要十分な機能で使いやすい。
オフラインでメモ帳として色々と書きためて、 本来的な日記として使える。 適当にdraftとして投稿しとけばちょっとしたPCとの連携手段としても使える。優秀。
2014年3月19日水曜日
gnuplotでサポートされているmatrix形式について
バージョンは4.6。
3次元プロットをする時、データを行列形式として扱う場合、一様な格子のmatrixデータとして
z11 z12 z13 z14 ...
z21 z22 z23 z24 ...
使い方は、
splot "" nonuniform matrix w l
のように、nonuniformオプションを利用することで、第1行をy座標、第1列をx座標として読んでくれる。
テキストファイルの場合、最初のは意味を成さない。
バイナリファイルの場合、一つの曲面に対してファイルが一つ必要なのに対し(skipオプションとかで対応できるのだろうか)、テキストファイルはインデックス指定が可能なので複数のデータを一つのファイルにまとめることができる。
3次元プロットをする時、データを行列形式として扱う場合、一様な格子のmatrixデータとして
z11 z12 z13 z14 ...
z21 z22 z23 z24 ...
z31 z32 z33 z34 ...
等として扱える。しかし、座標情報が欠落しているため、ticsを調整してxy軸の座標を与える必要があった。
今回バイナリの扱いについてマニュアルを読んでいたら、以下のようなmatrix形式がサポートされているようだが、(32bit float型の配列)
...
...
...
: : : : ... :
同様なフォーマットで座標情報を保持した行列形式テキスト(ASCII)ファイルを扱う事ができるようだ。
使い方は、
splot "
のように、nonuniformオプションを利用することで、第1行をy座標、第1列をx座標として読んでくれる。
テキストファイルの場合、最初の
バイナリファイルの場合、一つの曲面に対してファイルが一つ必要なのに対し(skipオプションとかで対応できるのだろうか)、テキストファイルはインデックス指定が可能なので複数のデータを一つのファイルにまとめることができる。
2013年12月3日火曜日
itunesでの欲しい曲管理について
itunesでは、以前は欲しい曲(試聴レベルで良い曲含む)をそのままドラッグアンドドロップで任意のプレイリストに入れて未購入のまま管理することができた。
しばらくしてそれができなくなったけど、一回ウィッシュリストに入れると同様の操作ができていたはず。
今はそれもできなくなった…
アニメソングとか買いたい曲は少ないけどクールごとにまとめて管理できて便利だったんだが…
しばらくしてそれができなくなったけど、一回ウィッシュリストに入れると同様の操作ができていたはず。
今はそれもできなくなった…
アニメソングとか買いたい曲は少ないけどクールごとにまとめて管理できて便利だったんだが…
2013年9月24日火曜日
MinGW gcc でdllを作るメモ
Windows環境でMinGW gccでdllを作って使ってみたメモ。
使えることを確認しただけなので、正しく理解したければ他参照。
dll作成コマンド
パスの通ったフォルダにlibhoge.dllを移動する。(しないと実行時に無いと言われる)
同時にそのフォルダを環境変数LIBRARY_PATHに指定しておく。(次に-Lで指定するなら不要)
環境変数INCLUDEで指定したフォルダにヘッダを移動する。(次に-Iで指定するなら不要)
dllを利用するプログラムのコンパイル
使えることを確認しただけなので、正しく理解したければ他参照。
dll作成コマンド
gcc -shared -o libhoge.dll hoge.c-sharedオプションを付ければとりあえずdllが作成できる。
パスの通ったフォルダにlibhoge.dllを移動する。(しないと実行時に無いと言われる)
同時にそのフォルダを環境変数LIBRARY_PATHに指定しておく。(次に-Lで指定するなら不要)
環境変数INCLUDEで指定したフォルダにヘッダを移動する。(次に-Iで指定するなら不要)
dllを利用するプログラムのコンパイル
gcc -lhoge -o hogetest.exe hogetest.cこれで一応意図する動作はさせられた。
登録:
投稿 (Atom)