Python numpyの基本

Python学習【365日チャレンジ!】316日目のマスターU(@Udemy11)です。

ここ数年、クリスマスプレゼントを貰ったことがないのですが、クリスマスシーズンになると欲しい物を購入してクリスマス気分を味わっています。

今年は、ちょっと大きめのクーラーボックスをネットで購入しました。

商品が届いて満足していたのですが、釣具屋によってみると、同じものが2000円も安く販売されていてちょっとガックリしたのですが、よく見ると税別の表示があったので、実質ほんのちょっとだけ安く購入できていて一安心。

ものを購入するときは、どうしても値段が最終的な判断材料になってしまうのですが、できることなら値段を気にすることなく、自分が満足するものを値段を気にすることなく購入できるくらいお金を稼げるようになりたいものです。

それでは今日も、Python学習を始めましょう。

昨日の復習

昨日は、arangeを使った配列の簡単な作成方法やデータの数が多い配列の表示方法について学習しました。

arangeを使えば、行列を指定して配列を作成することができましたが、引数に1つだけ整数を入れるとその値の数の配列を作ることができました。

また、reshapeを使うことで、1次元の配列を2次元や3次元に整形することもでき、データの数が多い数列の表示を...,で省略せずに表示する方法も学習しました。

詳しくは、昨日の記事をごらんください。

今日は、複数の配列を使った演算について学習します。

append

配列を3つ作成し、作った配列を使っていろいろな操作をしてみます。

まずは、リストでも使うappendです。

import numpy as np
x = np.arange(0, 8, 2)
y = np.arange(4)
z = np.arange(0, 80, 20)
x
# array([0, 2, 4, 6])

y
# array([0, 1, 2, 3])

z
# array([ 0, 20, 40, 60])

np.append(x, y)
array([0, 2, 4, 6, 0, 1, 2, 3])

xyzに3つの配列を代入して、それぞれを出力しています。

最後に、appendxyをくっつけています。

ちなみに、3つの配列をくっつけるのにnp.append(x, y, z)としたら、エラーが起こりましたので、3つの配列を付け足すにはnp.append(np.append(x, y), z)のように入れ子にすれば、1次元の配列にすべての値を入れることができました

vstack

vstackは、配列をくっつけて、2次元の配列にします。

np.vstack([x, y, z])
# array([[ 0,  2,  4,  6],
#        [ 0,  1,  2,  3],
#        [ 0, 20, 40, 60]])

vstackは、列数が揃っていないとエラーになるようで、array([0, 1, 2])array([0, 1, 2, 3])vstackしようとすると、エラーになりました。

hstack

appendで試した3つの配列をくっつけて1行の配列にするには、hstackを使います。

np.hstack([x, y, z])
# array([ 0,  2,  4,  6,  0,  1,  2,  3,  0, 20, 40, 60])

ちなみに、vstackvは、verticalで、hstackhは、horizontalの意味です。

演算

列の数が同じ配列については、四則演算を使うことができます。

a = np.array([0, 10, 20, 30, 40])
b = np.arange(5)
a - b
# array([ 0,  9, 18, 27, 36])

a + b
# array([ 0, 11, 22, 33, 44])

a * b
# array([  0,  10,  40,  90, 160])

a / 2
# array([ 0.,  5., 10., 15., 20.])

a > 20
# array([False, False, False,  True,  True])

a *= 2
a
# array([ 0, 20, 40, 60, 80])

一気に四則計算をしてみましたが、まずは、abの配列を作成し、引き算、足し算、掛け算、割り算を出力しています。

どちらの配列も5列あるので、それぞれの列で四則計算をしています。

a > 20は、20より大きい値はTrue、20以下の場合はFalseを返すboolean型の配列が返されています。

最後は、配列a2をかけた値でaを書き換えて出力しています。

まとめ

配列の演算をひととおりやってみましたが、割り算のみ、abで割らずに2で割っていますが、これは、配列に0が入っているので、RuntimeWarning: invalid value encountered in true_divideという警告が表示されたからです。

0では割れませんよ〜」ということですね。

他にも、列の数が違う配列で演算をしてみてエラーが起こったのですが、試してみるとできること、できないことがわかってきます。

配列の出力の見た目が少し分かりづらいのですが、これはなれるしかありませんので、どんどんコードを書いて、失敗しながら慣れていきましょう。

それでは、明日もGood Python!