Python学習【365日チャレンジ!】317日目のマスターU(@Udemy11)です。
クリスマスイブですね〜!
コロナのせいで人では例年より少ないとはいえ、恋人たちには関係ないんでしょうね。
4月に緊急事態宣言を出したときに比べて、何倍の感染者になってるのかわかりませんが、こんな状態でも緊急事態宣言を出さないということは、政府が、これを気に高齢者の数を減らしたいと考えてるのではないかと思えても仕方がありません。
ほんとこの先どうなっていくんでしょう?
自粛はチャンスと捉えて、自己研鑽でスキルを磨きましょう!
ということで、今日もPython学習を始めますよ。
昨日の復習
昨日は、複数の配列を使った演算について学習しました。
列の数が同じなら、複数の配列を使って四則演算をすることができました。
割り算については、0
で割ることができないので、注意が必要ですが、演算子=
を使うことで、配列の値を上書きすることもできました。
いろいろ試してみることが大切ですので、いろいろと試して経験値をアップさせましょう。
くわしくは、昨日の記事を参照してください。
今日は、randam
を使った配列や行列の入れ替え操作などについて学習します。
random
random
は、0から1の間で任意の値を配列にできるメソッドです。
import numpy as np
np.random.random((2, 3))
# array([[0.95367176, 0.44611864, 0.45904239],
# [0.61164295, 0.82608661, 0.25361573]])
np.random.ranf((2, 3))
# array([[0.00744201, 0.18533881, 0.03274229],
# [0.85827874, 0.50345242, 0.36198251]])
np.random.sample((2, 3))
# array([[0.28036025, 0.96709082, 0.84582569],
# [0.33677406, 0.23364462, 0.57108953]])
np.random.random_sample((2, 3))
# array([[0.24652542, 0.03436601, 0.85997402],
# [0.02532444, 0.9086837 , 0.19519088]])
np.random.rand(2, 3)
# array([[0.58809668, 0.7462008 , 0.89225268],
# [0.1646393 , 0.65508032, 0.24908963]])
random
、sample
、ranf
はすべてrandom_sample
のエイリアスで、すべて同じ使い方ができます。
同じものがそんなに必要なのか疑問ですが、Pythonの開発段階でまとめたのかもしれませんね。
最後のrand
も同じ使い方ができますが、違いは、random_sample
が、Parenthesesの丸括弧でくくったタプルで値を渡すのに対して、rand
は、数値をそのまま代入しているので、Parenthesesの丸括弧が一つ少なくなっています。
sum()
sum
は合計ですね。
a = np.random.rand(2, 3)
a
# array([[0.83670122, 0.50292842, 0.03355007],
# [0.22862364, 0.81227643, 0.95654644]])
a.sum()
# 3.3706262238688165
max()
max
は最大値です。
a.max
# 0.95654644
min()
min
は最小値です。
a.min
# 0.03355007
mean()
mean
は平均値です。
a.mean()
# 0.5617710373114694
randint
ranint
は、任意の整数の範囲からランダムに値を抽出するメソッドです。
np.random.randint(0, 10)
# 2
np.random.randint(0, 10, 3)
# array([3, 8, 8])
np.random.randint(0, 10, (2, 3))
# array([[3, 3, 7],
# [1, 9, 7]])
引数で範囲を指定すれば、ランダムに選ばれた値が抽出されます。
第3引数に数値を指定すれば、その数だけランダムな値が入った配列が返されます。
第3引数にタプルで行列の数を指定すれば、ランダムに選ばれた数で構成された行列の配列が作成されます。
axis
axis
は、sum
などの計算をする時に、配列の計算を行方向か列方向の指定をする引数です。
b = np.random.randint(0, 12, (3, 4))
b
# array([[ 5, 4, 1, 4],
# [ 9, 6, 1, 2],
# [ 9, 4, 11, 1]])
b.min(axis=0)
# array([5, 4, 1, 1])
b.min(axis=1)
# array([1, 1, 1])
ランダムな数字で3行4列の配列b
を作成して、最初は、axis=0
で列の中で最小値を探しています。
次はaxis=1
で行の中の最小値を探しています。
axis
は、min
だけでなくmax
やsum
などでも使うことが可能です。
T
キャピタル(大文字)のT
は、行列を入れ替えることができます。
c = np.arange(12).reshape(3, 4)
c
# array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11]])
c.T
# array([[ 0, 4, 8],
# [ 1, 5, 9],
# [ 2, 6, 10],
# [ 3, 7, 11]])
3行4列の配列c
を作って、c.T
で行列を入れ替えています。
resize
いま作成した配列c
は3行4列ですが、これを2行6列に変更できるのがresize
です。
c.resize((2, 6))
c
# array([[ 0, 1, 2, 3, 4, 5],
# [ 6, 7, 8, 9, 10, 11]])
配列に入っている値の数が12なので、12が割り切れる数でないとエラーが起こるので、例えば(2, 5)
で2行5列にリサイズしようと思ってもできないということです。
まとめ
Numpyの配列について、いろいろな使い方を学習してきましたが、エクセルの元になっているのがこれらのプログラムなのかと考えると、ビジュアルのイメージとコードが繋がって理解が深まっていきます。
エクセルでも配列計算はできるのですが、いまいち理解できていなかったので、今回学習したことで、エクセルでも配列関数を扱っていこうと思います。
アプリケーションのもとは、プログラムなので、その根本的なところを学習するのは、ある意味パズルを解いていくような快感を感じるのですが、これが苦痛な人はプログラミングに向いてないかもしれませんね。
幸いながら!?私は、読み解く、紐解くという快感を感じているので、Pythonの深みにハマっていこうと思います。
Pythonの深みにハマりたい方には酒井さんの講座がおすすめです。
それでは、明日もGood Python!