100 numpy exercises


2017年 06月 25日

PythonをAIなどで使おうと思ったら、かならず使うことになるのがNumPyである。 様々な計算処理をしようとすると、はやり配列を使って高速に計算する必要がでてくるので、配列をサポートしているNumPyは避けて通れない。
 NumPyにあるtutorilaなどを参考に勉強したり、ネット上にウヨウヨ存在する説明をみて勉強するのもあるのだが、もうちょっと面白い勉強方法、あるいは腕試しには、100 numpy exercises が良いかも。

題名どおり、100の小問で構成されている。
難易度が3段階になっていて、やさしい、基本的なものから、次第に難しい問題になっているようだ。
最初は1、2行で十分な簡単な問題ばかりだが、次第に長いプログラムを書かないといけなくなり、20行程度のプログラムになることもある。

問題と解答があり、どうしてそう書けば良いのかは自分で考えよう、というスタンスのようである。
もちろん、世の中には延々と解いて、解説ページを公開している人もいる。

解説ページを読むより、解答が理解できなかったら、ネットで色々探して、理解できるようになろう。
さらに、出題範囲以外のことを色々試すことをお薦めする。

あ、書き忘れていたことがある。
もちろん、全部英語だけれど、やさしいプログラミング英語なので、問題ないだろう。
どうせ、プログラムをいっぱいやるようになったら、英語しかない世界にすぐなるのだし、プログラミング英語に慣れる良い機会だ。

まず、最初の問題。こんなに簡単で、分からない人はいないはずだ。

1. Import the numpy package under the name np (★☆☆)

import numpy as np

そして最終問題は、こんな感じだ。

100. Compute bootstrapped 95% confidence intervals for the mean of a 1D array X (i.e., resample the elements of an array with replacement N times, compute the mean of each sample, and then compute percentiles over the means). (★★★)

# Author: Jessica B. Hamrick

X = np.random.randn(100) # random 1D array N = 1000 # number of bootstrap samples idx = np.random.randint(0, X.size, (N, X.size)) means = X[idx].mean(axis=1) confint = np.percentile(means, [2.5, 97.5]) print(confint)


こんな問題に対するプログラムをすらすら書けるようになったら、もちろんNumPyのお勉強は優秀な成績で卒業だ。
NumPyの勉強は、通過すべき最初のゲートみたいなものだ。どんどん先へ行こう。