2.4. NumPy¶
[1]:
import numpy as np # numpyのインポート
2.4.1. NumPy配列の生成¶
[2]:
x = np.array([1.0, 2.0, 3.0])
print(x)
[1. 2. 3.]
[3]:
type(x)
[3]:
numpy.ndarray
2.4.2. NumPyの算術計算¶
[4]:
x = np.array([1.0, 2.0, 3.0])
y = np.array([2.0, 4.0, 6.0])
[5]:
x + y
[5]:
array([3., 6., 9.])
[6]:
x - y
[6]:
array([-1., -2., -3.])
[7]:
x * y # element-wise product
[7]:
array([ 2., 8., 18.])
[8]:
x / y
[8]:
array([0.5, 0.5, 0.5])
x, yの要素数が同じ (要素数3の1次元配列)
要素数が同じ場合、算術計算は各要素に対して行われる
要素ごとは、英語で「element-wise」と呼ばれる
[9]:
x = np.array([1.0, 2.0, 3.0])
x / 2.0 # スカラ値を組み合わせた計算は、
[9]:
array([0.5, 1. , 1.5])
2.4.2.1. 🤔NumPyを使わないで配列を計算するとどうなるか¶
[10]:
a = [0, 1, 2]
b = [3, 4, 5]
[11]:
a + b # 行列の結合
[11]:
[0, 1, 2, 3, 4, 5]
[12]:
a - b
----------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-12-09bd029d0285> in <module>
----> 1 a - b
TypeError: unsupported operand type(s) for -: 'list' and 'list'
[13]:
a * b
----------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-13-9bc1a869709f> in <module>
----> 1 a * b
TypeError: can't multiply sequence by non-int of type 'list'
[14]:
a / b
----------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-d8e10abd5ab6> in <module>
----> 1 a / b
TypeError: unsupported operand type(s) for /: 'list' and 'list'
[15]:
a * 5
[15]:
[0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
2.4.3. NumPyのN次元配列¶
[16]:
A = np.array([[1, 2], [3, 4]])
print(A)
[[1 2]
[3 4]]
[17]:
A.shape # 行列Aの形状。つまりこれは2次元配列であることを示す
[17]:
(2, 2)
[18]:
A.dtype # 要素のデータ型
[18]:
dtype('int32')
[19]:
B = np.array([[3, 0], [0, 6]])
A + B
[19]:
array([[ 4, 2],
[ 3, 10]])
[20]:
A * 10
[20]:
array([[10, 20],
[30, 40]])
2.4.4. ブロードキャスト¶
2次元配列とスカラ値の掛け算では、スカラ値が2次元配列に変換された後に計算される
[21]:
A = np.array([[1, 2], [3, 4]]) # ((A1, A2), (A3, A4))
B = np.array([10, 20]) # (B1, B2)
A * B # = ((A1 * B1, A2 * B2), (A3 * B1, A4 * B2))
[21]:
array([[10, 40],
[30, 80]])
2.4.5. 要素へのアクセス¶
[22]:
X = np.array([[51, 55], [14, 19], [0, 4]])
print(X)
[[51 55]
[14 19]
[ 0 4]]
[23]:
X[0]
[23]:
array([51, 55])
[24]:
X[0][1]
[24]:
55
[25]:
for row in X:
print(row)
[51 55]
[14 19]
[0 4]
[26]:
X = X.flatten() # Xを1次元配列へ変換
print(X)
[51 55 14 19 0 4]
[27]:
X[np.array([0, 2, 4])] # インデックスが0, 2, 4番目の要素を取得
[27]:
array([51, 14, 0])
[28]:
X > 15 # Xが15以上である要素の結果
[28]:
array([ True, True, False, True, False, False])
[29]:
X[X > 15] # Xが15以上の要素のみを抽出
[29]:
array([51, 55, 19])