名もなき黒猫の散歩道

MENU

続・言葉の壁

こんにちは黒猫です。前回の記事を書いてから、C++を主に勉強していたのですが、「C#の方が汎用性高いですよ」というアドバイスを受け、今はC#をメインに勉強しています。
(C++のメモリの扱いが意味わからなくて挫折したなんて一言も言ってませんからね)


C#は、Microsoftが2000年頃に開発したプログラミング言語です。"C"と付くだけあって、C/C++をもちろん踏襲してはいるのですが、どちらかというと、C/C++よりもJavaという言語によく似ていると言われます。開発元がMicrosoftなだけあって、Windows用のアプリケーションの作成には今でもかなり用いられています。昔はWindows“でしか”動かない印象が強かったC#ですが、今ではMacやLinuxでも使われるように進化してきています。

一方、Appleは昔から、Objective-Cという言語を用いて開発を行ってきていました。しかし、2014年にAppleも新しいプログラミング言語を開発しました。それがSwiftと呼ばれる言語です。少し前のiPadが公表された時に「子供でもプログラミングを学べる」という謳い文句で、“Playground”というアプリが公表されました。このPlaygroundはまさに、Swiftで動いています。黒猫がプログラミングに興味を持つきっかけになったのも、実はこのPlaygroundです。

まぁなんでこんなプログラミング言語の紹介をしたかというと、「結局どれが速いんだろう」というのが知りたくて、上記の言語を試してみたので、それをお見せしたかったからです。いわゆる自己満足ですね 笑

やったことは、前回の記事と全く同じです(1億回の足し算に要する時間を比較)。
というわけで結果に移りましょう!刮目せよ!
(Python3とC++も計り直しました)
Fig1_180214.png ぱ、Python遅すぎるやろ。。。

Python以外がもう見えなくなってしまいそうです 笑

ちなみにPythonは少し前にPython2からPython3へ進化を遂げたので、
今回はその2つの比較もしてみたのですが。。
なんで2より3の方が遅いんや!?
完全にPythonだけに蛇足なことがあったのかもしれません 笑
(注:pythonとは本来ヘビの一種です)

Python2に1点だけ30秒超えがありますが、これはなぜか何回やり直しても出ます。
反復処理で10回、1億回の足し算を計算させているのですが、
その1回目だけ、なぜか時間が延びる傾向がありました。
(たまに2,3秒しか延びないこともあるのですが、それでも2回目以降より遅い)
何なのでしょうね、1回目は色々と初期化するから遅くなるのかな?


さて、見えにくい残りの5本を拡大してみましょう!
Fig2_180214.png  
C#が一番速くて、その次にCおよびC++、その次にSwift_1、Swift_2(違いは後述)という結果になりました。

CやC++は速いとの評判が強いので、C#の方が速かったのは意外でした。CやC++のコードの書き方が悪かったのかもしれません。それか、この2つはコンパイル言語なので、コードを別ファイルに書き換える(コンパイルする)ために別のツールを使うのですが、もしかしたらそのツールの性能の差が出ているのかも知れませんね(いかにそのツールが機械にとって読みやすい物を書いているかどうか、ということです)。

この中でSwiftは唯一コンパイルしてもしなくても使える言語です。Swift_1はコンパイル無し、Swift_2はコンパイルありで実験してみたのですが、予想外にコンパイルが無い方が速いという結果になりました。何でなんだろ。。Swiftは今回のためにちょこっとだけ勉強しただけなので、よく分かりません 笑

こういう結果を見ると、Pythonはダメなんじゃないかという雰囲気になってしまいますが、私はPythonが大好きです。やはり何と言ってもシンプルですし、特に科学系のデータを扱う時には、Pythonはかなり道具が揃っています。上のグラフも、今回はPythonで書いてみました。Pythonならプログラミング素人の黒猫でもこれくらいなら作ることが出来るのが、Pythonのすごいところです。

しかし、やはり計算量が必要な時には言語の使い分けが必要なのもまた事実なのかも知れませんね。プログラミングは奥が深いと思いました。

というわけで今日はこのあたりで。読んで下さりありがとうございました!


追記で今回使ったソースコードを置いておきます。

スポンサーサイト

言葉の壁

こんにちは、黒猫です。最近プログラミングのことしか書いてない気がしますが、今日もプログラミングの話。


年始の挨拶にも書きましたが、最近C++をちょっとずつ勉強しています。C++とPythonは、同じ「オブジェクト指向性言語」というジャンルには属しますが、全く構造の違う言語なので、なかなか苦労する毎日です。そんな中、この2つの言語の差がどれくらいあるのか気になって調べてみました。

C++は、プログラミング言語として有名な「C言語」の発展系にあたる言語で、「コンパイル言語」のひとつとして知られています。コンパイル言語とは、簡単に言うと、「人間が書いたものを、一度コンピューター内で翻訳して新しいファイルを作成し、その新しいファイルを実行することで、書いたプログラムを実行する」という形式を取る言語を言います。

一方でPythonは、最近はやりの機械学習などで大活躍中の言語で、「インタプリタ言語」のひとつです。インタプリタ言語とは、「人が書いたものを、1行ずつ翻訳することで、書いたプログラミングを実行する」という形式をとる言語を言います。

つまり、C++では一度別のファイルを作らないと動かないのに対して、Pythonでは書いたコードのファイルをそのまま実行できるという利点があります。Pythonの方が人間が実行するのは楽なのです。しかし、コンピューターからすれば、一度翻訳してくれているファイルがある方が、スムーズに処理できるわけで、そういう意味でC++はコンピューターにとっては実行しやすい言語となります。

しかし昨今のコンピューター技術は凄まじく、インタプリタ言語でもかなりの速度で実行することが出来るようになってきています。そんな背景から、「実際、どれくらい計算スピード違うんだろ?」と思うに至り、計算することにしました。・・・すごい前置きしっかり書いてしまった 笑

やった内容は、「1から1億まで足すのに必要な時間」を10回測って、その平均値を求めるというものです。その時に使ったPython3とC++のコードは追記に載せました。というわけで早速その結果がこちら!

Py3_vs_C++

Python3の平均時間が約28.3秒、C++の平均時間が約0.37秒でした。つまりPython3よりもC++の方が100倍計算が速いということになります(もちろんP < 0.001で統計的に有意差ばっちり)。C++すごすぎるやろ。。

Pythonは、色々なツールが揃っていて非常に便利な上に、コードも書きやすい言語なのですが、処理が遅いのは前から少し感じていて、そういう言語の特徴に由来する壁を越える必要がある時に備えて、C++をやろうとは思ったのですが。。こんなに速いとは思ってもいませんでした。C++、好きになりそうです(単純)。

またC++をブログで実行する術を探さねばですね。
ではそんな感じで、最後まで読んで下さりありがとうございました!

久しぶりの黄色い野菜

センター試験懐かしいなと思う今日この頃な黒猫です。
もうあれから10年も経ったとは(なんて書いたら歳がバレますが)、感慨深いというか年をとったというか。。当時からは想像も出来ないですね。なんでアメリカにおるんや、って感じです 笑


さて、日頃ピザやらスパゲッティやらSubwayなどの洋食やベーコンと野菜の醤油炒めやカレーなどの日本食を食べる毎日でしたが、この度秘密兵器「粉末ほんだし」が手に入ったので、ちゃんとダシのきいた本当の日本の味を思い出そうと思い、カボチャを炊いてみました!

IMG_6639.jpg

サンフランシスコにはJapan townという、いわゆる日本でいうところの“中華街”の日本版がありまして、そこで日本のカボチャが売られていたのです。まぁいわゆる衝動買いですね。笑

日本にいる時もカボチャを炊いたことはありますが、それは下宿を始めた最初の2年くらいの間だけで、研究室生活が始まると煮物なんていう面倒なことはほとんどしていなかったので、本当に7年ぶりくらいに?作りました。

感想。めっちゃおいしい(自己満足)。

最初は味付けが不安だったのですが、案外忘れないものですね、作りながら味見しながら色々と足して、思った味になりました。とりあえず、アメリカでも、ちゃんとしたカボチャを買えば、おいしく作れるということが分かったのは大きな成果です 笑

アメリカではこの黄色いカボチャは珍しいらしく、カボチャを切っている時にルームメイトのアメリカ人に「何これ?」って言われました。「見たこと無いわー」とのことだったので、パンプキンパイは別のカボチャ(橙色のやつ)を使って作るのかも知れませんね。

何はともあれ、日本食は外食ではほとんど食べられないので、カボチャも含めて、他の物もまたそのうち作りたいと思います。ダシの味って大事。笑


それでは自己満足失礼致しました、読んで下さりありがとうございましたー!

戌は英語で・・・

2018_年賀状_横 

というわけでみなさま、新年あけましておめでとうございます。
初夢は、

  「墜落しつつある飛行機に乗っていたけれど、
  金色の竜に助けられて(ドラゴンボールの神龍みたいな奴)、
  なんとか日本のどこかに不時着して助かった

という、なんとも幸運なのか不運なのかよく分からない夢だった、黒猫です。

2017年は躍動の年でした。
通算9年も在籍した大学を卒業してからのアメリカへの移住。
もうこんなに躍動する年は無いと信じたいです、精神的に疲れます 笑

アメリカに来てからは、実験データに一喜一憂しながら、
こちらに来て初めて学ぶ技術を習得する毎日でした。
なかなか難しい技術ですが、ようやく安定しつつあります。
2018年が勝負の年だと思うので、頑張っていきたいものです。

サンフランシスコへは今までに2回訪れていて、
その時は数日しかなかったのに、しっかりと観光名所を回ったりしました。
しかし実際住んでみると、何処にも行かなくなってしまうもので、
2018年はもう少しどこかに行きたいと思っています。
美術館や動物園は一度くらい行っておきたいです。

あと、遠出になりますがモントレー水族館とヨセミテ!
この2つのうち片方は今年中に頑張ってチャレンジします。

その他はプログラミングですね。もう少しPythonに慣れて、
できればもう一つくらい(C++?)ちょっと勉強してみようと思います。
文法はともかく、まだまだPythonの機能を知らねばならないので、
先になるとは思いますが。

なんとなく細かい目標はつらつらと書いたので、
残すは全体的な抱負ですね。今年の目標は、

後悔しないように過ごす

でいきたいと思います。
それでは皆様、末筆になりましたが本年もどうぞよろしくお願い致します。




クリスマスとお正月はパソコンと遊ぼう

クリスマスも終わりましたね!皆様いかがお過ごしでしょうか?

サンフランシスコ市内ユニオンスクエアでは、こんな立派なツリーが立っていました。
S__10215595.jpg 

なんととその隣には屋外スケート場までできていました!
S__10215597.jpg 

私はスケート苦手なので滑ってはいませんが。。
こういうものがあると、さぞかし「リア充(カップル)」が多いイメージが膨らむかも知れませんが、案外12/24の昼のサンフランシスコ市内ではカップルは少なく、どちらかというと友達複数人グループが目立った印象です。アメリカだし、クリスマスは家族で、みたいな感じなのかも知れませんね。人もいつもより多いとはあまり感じませんでした。

まぁそんなクリスマスシーズンですが、黒猫からみなさまにゲームをプレゼントすべく(嘘)、
数字当てゲームを作ってみました!



簡単に言うと、1 ~ X(自分で設定できる)までの整数のうちで、パソコンが選んだ数字を当てるというゲームです。1回数字を入力する度に、パソコンが選んだ数字がその数字より大きいか小さいかを答えてくれます。それを基に頑張って推理して下さい!

初めにプレイヤー名の入力、次にXの設定、次に入力回数の設定です。それが終わったらゲーム開始になります。ちなみに、ゲーム開始後の数字入力欄に「Give up」と入力すると、途中で投了できます。
プレイヤー名以外は半角で打たないと認識しないので注意して下さい!終わった後は上の画面のRunボタン(▶)を押すと、もう一度挑戦できます。

是非是非楽しんで下さい!君は何回で当てられるかな?
それではメリークリスマス、良いお年を!

パソコンの計算能力

お久しぶりです、黒猫です。今日は室温が20℃を久々に下回って、寒くなったな、と思う毎日です。


さて、今日はプログラミングの話。
ふと「パソコンの計算の速さってどれくらいなのだろう」と思い立ち、「1から整数xまで順番に足し合わせるのに必要な時間」を計測することにしました(なぜ、とは聞かないで)。
使った言語はPython3で、こんな感じに書いて、

コード
(画像でごめんなさい、初心者なので不適切な箇所があるかも知れませんがあしからず)

あとは2行目の1e5 (= 100000、これが整数X)を色々と変えて、実行してから9のアウトプットが出てくるまでの時間を計ってもらいました(by Atomのパッケージ)。

で、その結果が以下の感じになりました。
Python3_speedtest 見事に、1から10の5乗までを足す計算を境に、計算時間が直線的に増加しています。
このグラフは両軸常用対数なので、この範囲では
log(要した時間) = k × log(整数X) + C
が成立しているということです。手元にある統計ソフトで近似すると(図の点線)、k = 0.979、C = -6.381だったので、計算し直せば、私のノートパソコン(MacBook)では、

整数Xまでを順番に足すのに要する時間(秒) = 4.16 × (10の-7乗) ×(整数X)の0.979乗

となるようです!

だからどうした。

・・・と自分でも突っ込みたくなりましたが、まぁそんな感じになるとは知らなかったので、少し感動しました 笑。整数Xは別の言い方をすれば「足し算をした回数」であることと、0.979は1とほとんど一緒であることを考えれば、
整数Xまでを順番に足すのに要する時間(秒) = 4.16 × (10の-7乗) ×(足し算をした回数)
と、近似できそうですので、1回の足し算あたり0.416マイクロ秒かかっている、ということになるのかもしれません。この0.416マイクロ秒が何を示すのかは分かりませんが、おそらく使用したプログラム言語、コードの書き方、ハードの能力など、色々な因子が絡み合った結果なのだと思います。ちなみに、10の5乗以下の足し算は、プログラムが動くまでにかかる時間が足し算の時間より長いために、一定になっていると思われます。それにしてもものすごい速さで計算できるのですね。改めて実感しました。

この計算をしている時に少し面白いことを知ったのですが、それを記事にするには私の知識が浅すぎるので、またの機会に書きたいと思います。

それでは、最後まで読んで下さってありがとうございました!



だいたい半年。

お久しぶりです、黒猫です。特に書くこともないのですが、こちらに来て半年経ったのか、と思ったのでブログを書くことにしました 笑

半年経って思ったことは、「英語はすぐには上手くならない」です。笑
ちゃんと書けば、英語を話す力はそんなに上達しない、と実感しました。
英語を聞く力は、やはり聞く機会が圧倒的に多いために、相手が少しインド系や中国系などでも、聞き取れる(意味が分かるわけではない)ことが多くなった気がします。英語を書く力も、まぁメールが英語だったりするので、適当に簡単なことを書くことはできるようになった気がします(アカデミックな英語ではなく、日常英語)。英語を読むのも、読まざるを得ないので、少し速くなりました。たぶん。ただ話すのは、来た直後ほど悪いわけではないですが、やっぱり語彙力がものすごく上がるわけではないためか、つっかえることがまだある印象です。英語って奥が深いですね。本当に。笑

研究のこと。ここでの研究は、「技術力が命」という側面が非常に強く、半年かけて実験器具の立ち上げからすべてやってきました。実験を実際に行い始めた4ヶ月くらい前に比べれば、かなり実験できるようになってきているとは思います。もう少し効率を上げることができれば、という印象ですが。あとは今行っていることをどこまで詰められるか、というところですね。次の半年が大きな節目になりそうな気がします。

その他。もう少し遊びに行きたい 笑
しかし、お金がそんなにないんですよね。。家賃がとってもお高いせいで、自由に使えるお金が限られているので、なかなか渋ってしまう毎日です。もう雨期も始まってしまうし、雨期が明けるまでは遠出はできないかな。。次の春までに行きたいところを考えないといけませんね 笑 ヨセミテにはいつかチャレンジしたいですが。

あと、ここ1,2ヶ月くらい、pythonの勉強を再開していました。日本から持ってきていた初心者用の本をついこの前やっと読み終えて、なんとかpythonで「入力した文字を、レコードと照合して、同一のものが無ければ、外部のテキストファイルに保存する」という単純なGUIを作る術を学びました。本当にプログラミングのことなんて全く知らなかったので、案外ウィンドウそのものを作るのは簡単だったり、ウィンドウを上の隅のxで閉じた時に出る警告メッセージはちゃんと組み込まないといけないものだったり、日常的に使っている物の偉大さを感じました。でも楽しく勉強できたので良かったです。次の半年以内に、この仕組みを使って、今の実験の簡潔なレコードを作るGUIや、簡単なゲームのGUIを作りたいと考えています。じゃんけんをするプログラムは昔に作ったので、それをGUI化できれば良いなと考えています。五目並べとかも作れると良いなぁ。難しそうですが。

あとは、趣味として、こちらに来て1ヶ月くらいして、ギターを買いました。アメリカですが、YAMAHAのクラシックギターです 笑。ケース付きで150ドルだったので、まぁそんなに高くなかったですが、そこそこいい音が出るものを探し出せたので、個人的には満足しています(ギターって同じ型番でも、1本1本音が違うのです)。
それと、チェスを少しだけ囓り始めました 笑 でも最近は勉強できていないので、これはもうすぐフェードアウトしてしまうかな?まだわかりません。でも、チェスっておもしろいな、とは思いました。将棋よりもパズル感が強いです。将棋も強くないので全然わかんないですが 笑
ギターは、こっちでできたスイス人の友達と月に1-2回の頻度で一緒に弾いて楽しんでします。彼はギターをもう16年もやっているようで、最近マンドリンを買って、それを弾いて楽しんでいます。私がギターを始めたのは大学でマンドリンサークルに入ったからです。ですので、6年ぶりにマンドリンと再び合わせることになりました。人生、いつの選択が活きるのかって分からないものです。

そんな感じですかね。半年ごとにはまとめを書くのも悪くないかもしれません。
何はともあれ、おそらく最初で最後の海外生活なので、悔いのないように頑張りたいと思います。

何にも読んで得する箇所がなくて申し訳ありません 笑
それでは、読んで頂いてありがとうございました!

昔話

こんにちは、黒猫です。自分のブログを読み返していて、そういえば自分は大学を卒業したのにそのことを一つも書いていないな、とふと思ったので書こうと思います。自分のための防備録です。

大学には、薬学部生として入学して、そのまま学部4年、修士2年、博士3年と、合計9年間在籍しました。学部生だった頃に何を考えていたのかは、昔のブログを読むと何となく分かりそうなので、ここには研究室に配属された学部4年次からの話を書こうと思います。


長くなりそうなので、続きは追記にします(そのかわり割と赤裸々に書きます)。お読みになりたい方はどうぞ。それでは。

新しい形

結局暑くなることはなく、このまま冬を迎えそうですね。その前に雨期なのかな?
あ、どうも、お久しぶりです、黒猫です。


特に変わることのない平穏な毎日を過ごしておりますが、最近気になっていたことがあって、それをやってみた感想を書こうと思ったので、久しぶりにブログを書くことにしました。

BioRxiv」。ご存じの方はいますでしょうか?
これは、数年前に開設された、生物系の論文が載るサイトの一つです。そのように書くと、普通の他の論文のウェブサイトと何が違うんだ、と思われるかも知れません。しかし、このサイトで見ることの出来る論文が他のサイトで見れるものと大きく違うところが一つあります。それは、「まだ正式に出版されていない(原稿状態の)ものばかり」というところです。具体的な歴史などはwikipediaのこのページに譲るとして、とにかく今までの「論文」とは全く違う、新しい形のデータの発表方法なので、ちょっと前から気になっていたわけです。

通常の論文は基本的にこういう流れで出版されます。まず、reviewerと呼ばれる研究者が投稿された論文を読んで、批評を出して、それに対して論文の執筆者が追加実験などをしながらお返事をして、reviewerがOKかどうかの判断を出し、それを元に出版社のeditorが最終ジャッジを下す、というものです(もちろん途中でeditorに切られることもある)。しかしこのBioRxivにはreviewerがいません。そのかわりに、論文を公表して、そこにあるコメント欄を介して読者がreviewer代わりに批評を下す、というしくみを取っています(もちろんそれで取り下げられることはほとんど無いとは思いますが)。

で、最近何をしたかというと、そのBioRxivの論文のひとつに、私の論文が引用されたという知らせがあって、良い機会だと思ってそれを読んで、コメントしてみたわけです。読んだ感想として、思った以上にしっかりと研究されていて驚きました。reviewerを介さずに公表されるので、ある程度質が低いものなのかなと思っていたのですが、少なくとも今回読んだものはそんなことはなく、楽しんで読ませてもらいました。

実は最近、通常の論文の方のreviewerとして論文を審査する機会がありました。今回、この両方の論文スタイルを審査する側から経験して思ったことは、この2つのスタイル、どっちもいいな、ということです(語彙力。。。)。reviewerは基本的にeditorから依頼されますし、公的に指名されているわけで、選ばれて光栄である一方責任もかかります。一方BioRxivのコメントは誰でもいつでも書くことが出来るし、こちらから論文を選べるし、論文の評価(採用の可否)を決めることもないので、気楽に何でも書くことが出来ます。もちろん人気ジャンルか否かによってコメントがつくか否かがかわってしまいますし、たぶん本気で査読審査をする人はBioRxivではほとんどいないと思うので、このBioRxivのシステムが全てにおいて優れているとは言いませんが、これもアリだな、と思いました。

投稿する側からすれば、reviewerによる査読審査がない分、早く掲載されますし、良いことづくしにも感じます。このBioRxivの論文を持っていることの対外評価がどの程度になるのか、研究者として少し気にはなりますが。なにはともあれ、今後が期待できる新しい論文の形だなと思いました。

尻切れトンボですが、今回はこのあたりで!読んで下さってありがとうございました!

なんでもアメリカン

ささいなことでも更新しようと思い立ちました。どうも、黒猫です。

最近思うこと。それは、アメリカは「大きな」国だ、ということです。
国の面積や経済、政治的影響力はもちろんのこと、

町行く人も日本人より大きいし(縦にも横にも)、
町行く車も、その車のための道路も、日本よりも大きいと思います。
そこら辺に生えてる木も日本より大きいことが多いし、
公園も日本より広い。
そこで遊んでいる犬も日本と比べて大型犬が多い。
あと、良く買い物をするスーパーマーケットも、とっても広いです。


そう、スーパーマーケット。
ここで私は一つだけもの申したい。


おまえだ、
チンゲンサイよ、
おまえはどうしてそんなに大きくなってしまったんだ。

ちんげんさい 本当に、キャベツとかタマネギとかは同じ大きさのくせに、
チンゲンサイだけはやたらと大きい。これがアメリカです(違)。
(なおコイツはbok choy、日本のチンゲンサイはbaby bok choyと言うらしいです)
ちなみに食べると、ちょっと日本のチンゲンサイより葉が厚いので固いですが、
まぁ同じように調理しても食べれます。

あと牛乳。
2リットルで買っても4リットルで買っても50円くらいしか変わらない。
そして1リットルなんかではほとんど売ってない(ていうか高い)。
何でもサイズでかいなぁ、と感心しています。

炊飯器をもらったおかげで、こっちに来て野菜を買おうと試みたおかげで、
色々と新しい文化を学ぶ毎日です。
あと気になる野菜は、ニンジンなので(やたらと細い、ピーターラビットが持ってるやつ)、
機会があればカレーでも作ろうと思います(日本のルーが手に入るので)。

以上、大したことないことを報告しました。
最後まで読んで下さってありがとうございました!