「論理的思考力を鍛える33の思考実験」 にレビューを書いたのだけれど反映されないので、ここにも書く。
https://amazon.jp/dp/4801302092/
第3章の間違いが多い。

  • p108 モンティ・ホール問題:ルールを明確に書くべきである。ルールが明確でないと結論は下記の通りで「いかようにもできる」ことに。

http://plaza.harmonix.ne.jp/~fakira/turedure/cprog_02.htm#020311

  • p184 2つの封筒・2:正しい結論は下記の通りで「わからない」。

http://qiita.com/SaitoTsutomu/items/9784e4451d6d510dbfbb

  • p187 エレベータの男女:正しい結論は「1/2の確率」。「1人がまず、エレベータから降りてきました。男性のようです。」から 「つまり、エレベータに乗っている2人のうちのどちらかは男性」と考えているのが間違い。

論理パラドクスは、お勧めである。
https://amazon.jp/dp/B06W54KMJN
アマゾンで低評価なのが理解できない。
答88の理想的行為の説明に違和感がある。問88について、(人数差と行為の有無の区別をなくし)より本質的にするために次のように変えてみる。

医師の問題
状況:患者Aから臓器移植を行い患者Bを助ける。当初、患者Aの生存に疑問の余地はなかったが、
臓器摘出後、不測の事態でそのままでは、患者Aが死亡することが判明。両方助けることは不可能。
方法1) 臓器を移植し患者Bを助け、患者Aを死なす。
方法2) 臓器を戻し患者Aを助け、患者Bを死なす。
方法3) 何もせず、両方死なせる。
運転士の問題
状況:書籍にほぼ同じ。
方法1) ボタンAを押し、作業員Bを避け、作業員Aを死なす。
方法2) ボタンBを押し、作業員Aを避け、作業員Bを死なす。
方法3) 何もせず、両方死なせる。

なお、方法3は、方法1と2の区別を無くすために用意されており、その選択の是非はここでは問わず、方法1か方法2の2択のみ考える。

この場合、医師の問題と運転士の問題は同じ問題であり、両者ともどちらを選んでも責められない。
しかし、最初から患者Aの臓器を摘出するとAが亡くなると医師が知っていた場合、書籍と同じく医師は責められることになる。
この2つの場合の医師の理想的行為は同じであるため、理想的行為かどうかは説明にならない。

単純に運転士が責められないのは(緊急避難により)法律を犯していないためであり、医師が臓器移植をして責められるのは、(殺人により)法律を犯しているからであろう。
法律以外の(例えば倫理など)の要素については、正解はないのではないだろうか。

問26同一人物であることの答の最後も違和感がある。
問50影のパラドクスの答でユニットをあげているが、光源Xに対する影Yの主体は、「XとYの間に存在する物体の集合の空でない部分集合の集まり」と考えることもできる。

PDFにマーク挿入。

import PyPDF2
pdf = PyPDF2.PdfFileWriter()
mrk = PyPDF2.PdfFileReader('mark.pdf') # マーク
mpg = mrk.getPage(0)
frm = PyPDF2.PdfFileReader('from.pdf') # 元PDF
for pg in frm.pages:
    pg.mergeTranslatedPage(mpg,10,10) # x,y
    pdf.addPage(pg)
pdf.addBlankPage() # blank
with open('output.pdf','wb') as fp:
    pdf.write(fp) # 出力

前は、Python で NumPy のインストールが大変だったので、2014年からAnacondaを使うようになった。
今は、pip でできるようになったようだ。

http://ymotongpoo.hatenablog.com/entry/2017/02/02/182647

最近は、データサイエンスにおけるPythonの環境構築で Anaconda を薦めているケースが多い。
標準の pip で いろいろできるようになっても、Anaconda の優位性はまだある。

  • NumPy が MKL。
  • Python だけでなく、graphvizなどのツールもある。

http://qiita.com/SaitoTsutomu/items/e93b008640062d143143
http://qiita.com/SaitoTsutomu/items/895dc98148942e740312

  • 多くのパッケージのインストールが一度にできる。
  • パッケージ間の依存を確認している。
  • Anaconda cloud で PyPIできちんと提供されていないパッケージが使える。

http://qiita.com/SaitoTsutomu/items/1326e05eb992a8aa849d
http://qiita.com/SaitoTsutomu/items/647349c4038d6a9e34be

「パッケージ間の依存の確認」を詳しく説明しよう。

「conda update --all」でインストール済みの全パッケージを最新にできる。
その上で、Anaconda Navigator の Environments を見てみると、astroid(1.4.9)のバージョンを上げられることがわかる。実際に、Anaconda Navigator 上でバージョンアップを試みると、astroid(1.5.3)があるけど、pylint と競合(conflict)してできないとおこられる。
さらに、コマンドプロンプトで、「conda info pylint」とすると、たくさんの情報の中に「astroid >=1.4.1,<1.5.0」という文字が見れる。つまり、astroid を最新の 1.5.3 にあげると、現バージョンの pylint に不具合が生じるということだ。

「pip install -U astroid」で何も気にせずにバージョンをあげると、いつか pylint で困ることが起きるかもしれないのを、Anaconda であれば、それを未然に防げる。(完璧ではないにしろ、確率を下げられる)