このサイトを参照しながらNumpyを学習する。GPUが使えないNumpyなんてどうでもいいと考えていた時期もあったが、実際は、PyCUDA等のGPUプログラミングにもNumpyは不可欠な存在なので、Numpyは避けては通れない鬼門と言える。
スポンサーリンク
preparation¶
import os
import sys
import glob
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
%matplotlib inline
%precision 4
plt.style.use('ggplot')
必要なデータを下記のサイトからダウンロードしてくる。
# download the data locally
if not os.path.exists('populations.txt'):
! wget http://scipy-lectures.github.io/_downloads/populations.txt
ダウンロードしたデータの中身をチラ見する。
# peek at the file to see its structure
! head -n 6 populations.txt
スポンサーリンク
numpyを使う¶
numpy arrayにデータをロードする。
# load data into a numpy array
data = np.loadtxt('populations.txt').astype('int')
data[:5, :]
値に分かりやすい名前を付けてやる。
# provide convenient named variables
populations = data[:, 1:]
year, hare, lynx, carrot = data.T
データの年の種ごとの生息数の平均と標準偏差
# The mean and std of the populations of each species for the years in the period
print ("Mean (hare, lynx, carrot):", populations.mean(axis=0))
print ("Std (hare, lynx, carrot):", populations.std(axis=0))
種ごとの生息数が最大だった年
# Which year each species had the largest population.
print ("Year with largest population (hare, lynx, carrot)",)
print (year[np.argmax(populations, axis=0)])
年ごとの生息数が最大だった種
# Which species has the largest population for each year.
species = ['hare', 'lynx', 'carrot']# Which species has the largest population for each year.
species = ['hare', 'lynx', 'carrot']
list(zip(year, np.take(species, np.argmax(populations, axis=1))))
list(zip(year, np.take(species, np.argmax(populations, axis=1))))
3種中1種以上の生息数が5万を超えた年
# Which years any of the populations is above 50000
print (year[np.any(populations > 50000, axis=1)])
種ごとの生息数が最少だった上位2年
# The top 2 years for each species when they had the lowest populations.
print (year[np.argsort(populations, axis=0)[:2]])
スポンサーリンク
matplotlibでplot¶
plt.rcParams['figure.figsize'] = 12, 9
plt.rcParams["font.size"] = "18"
plt.plot(year, lynx, 'r-', year, np.gradient(hare), 'b--')
plt.legend(['lynx', 'grad(hare)'], loc='best')
#ax = plt.axis([1900, 1920, -30000, 60000])
plt.xticks(range(1900, 1921, 5))
print (np.corrcoef(lynx, np.gradient(hare)))
スポンサーリンク
スポンサーリンク