Python基礎４ numpy メモ

pythonの基礎を備忘録として残しておく

# summary

```python
array = np.array([[1, 2, 3],[4, 5, 6]])  # 配列作成
print(array)
print(array.shape)  # 行列数
print(array.ndim)  # 次元数
print(array.size)  # 要素数
print(array.reshape(3, 2))  # ３行２列に
print(array.reshape(-1, 3))  # 3列のみ指定し、行は自動(-1)で
print(array.flatten())  # １次元に

print(np.arange(10))
print(np.arange(1, 10))
print(np.arange(1, 10, 2))

print(np.zeros(6))
print(np.zeros((2, 3)))  # 二重括弧に注意

print(array_1 + array_2)  # 各要素の足し算
print(np.append(array_1, array_2))  # 追加

print(array[0])  # 0行目
print(array[0][1])  # 0行1列目
print(array[0, 1])  # 0行１列目
print(array[:, 1])  # 全行1列目
print(array[-1, :]) #　最後の行全列

array = np.arange(9).reshape(3, 3)
print(array)
for i in array:  # 行の抽出
    print(i)
for i in array.flatten():  # 要素１つづつの抽出
    print(i)

print(array+10)  # ブロードキャスト
print(array*2)
print(array/2)

array_1 = np.arange(9).reshape(3, 3)
array_2 = np.arange(3).reshape(3, 1)
print(array_1 + array_2)  # ブロードキャスト

print(np.dot(array_1, array_2))  # 内積

print(np.sum(array, axis = 0))  # 行方向の足し算
print(np.sum(array, axis = 1))  # 列方向の足し算
```



numpyのインポート

```python
import numpy as np
```

# 1. 配列
配列の基本操作

```python
array = np.array([[1, 2, 3],[4, 5, 6]])  # 配列作成
print(array)
print(array.shape)  # 行列数
print(array.ndim)  # 次元数
print(array.size)  # 要素数
print(array.reshape(3, 2))  # ３行２列に
print(array.reshape(-1, 3))  # 3列のみ指定し、行は自動(-1)で
print(array.flatten())  # １次元に

# 出力
[[1 2 3]
 [4 5 6]]
(2, 3)
2
6
[[1 2]
 [3 4]
 [5 6]]
[[1 2 3]
 [4 5 6]]
[1 2 3 4 5 6]
```

np.arange関数による配列作成

```python
print(np.arange(10))
print(np.arange(1, 10))
print(np.arange(1, 10, 2))

# 出力
[0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]
[1 3 5 7 9]
```

np.zeros関数による配列作成

```python
print(np.zeros(6))
print(np.zeros((2, 3)))

# 出力
[0. 0. 0. 0. 0. 0.]
[[0. 0. 0.]
 [0. 0. 0.]]
```

np.random.rand関数による配列作成。直前に、np.random.seed = *** 指定で再現性のある乱数を得る。

```python
print(np.random.rand(3))
print(np.random.rand(2, 2))

# 出力
[0.17272856 0.47712631 0.51327601]
[[0.89263947 0.86838467]
 [0.33546726 0.56882862]]
```
要素の追加

```python
array_1 = np.array([1, 2, 3])
array_2 = np.array([4, 5, 6])
print(array_1 + array_2)  # 足し算では各要素が足されるだけ
print(np.append(array_1, array_2))  # 追加はnp.append関数を使う

# 出力
[5 7 9]
[1 2 3 4 5 6]
```
要素の参照

```python

array = np.arange(9).reshape(3, 3)
print(array)
print(array[0])  # 0行目
print(array[0][1])  # 0行1列目
print(array[0, 1])  # 0行１列目
print(array[:, 1])  # 全行1列目
print(array[-1, :]) #　最後の行全列

# 出力
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[0 1 2]
1
1
[1 4 7]
[6 7 8]
```
for 文での要素参照

```python

array = np.arange(9).reshape(3, 3)
print(array)
for i in array:  # 行の抽出
    print(i)
for i in array.flatten():  # 要素１つづつの抽出
    print(i)

# 出力
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[0 1 2]
[3 4 5]
[6 7 8]
0
1
2
3
4
5
6
7
8
```

ブロードキャスト（配列、スカラー）

```python
array = np.arange(9).reshape(3, 3)
print(array)
print(array+10)
print(array*2)
print(array/2)

# 出力
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[10 11 12]
 [13 14 15]
 [16 17 18]]
[[ 0  2  4]
 [ 6  8 10]
 [12 14 16]]
[[0.  0.5 1. ]  # 割り算を行うとFloat型になる
 [1.5 2.  2.5]
 [3.  3.5 4. ]]
```

ブロードキャスト（配列、配列）

```python
array_1 = np.arange(9).reshape(3, 3)
array_2 = np.arange(3).reshape(3, 1)
print(array_1)
print(array_2)
print(array_1 + array_2)

# 出力
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[0]
 [1]
 [2]]
[[ 0  1  2]
 [ 4  5  6]
 [ 8  9 10]]
```

行列間の加減算

```python
array_1 = np.arange(9).reshape(3, 3)
array_2 = np.arange(0, 90, 10).reshape(3, 3)
print(array_1)
print(array_2)
print(array_1 + array_2)

# 出力
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[ 0 10 20]
 [30 40 50]
 [60 70 80]]
[[ 0 11 22]
 [33 44 55]
 [66 77 88]]
```
行列の内積

```python
array_1 = np.array([[0, 1],[2, 3]])
array_2 = np.array([[4, 5],[6, 7]])
print(array_1)
print(array_2)
print(np.dot(array_1, array_2))

# 出力
[[0 1]
 [2 3]]
[[4 5]
 [6 7]]
[[ 6  7]  # 0*4+1*6  0*5+1*7
 [26 31]] # 2*4+3*6  2*5+3*7
```
![スクリーンショット 2019-08-15 21.53.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/00b375d4-195b-1515-72e9-439dc62bb3fe.png)


行方向・列方向の処理

```python
array = np.array([[0, 1, 2], [3, 4, 5]])
print(array)
print(np.sum(array))
print(np.sum(array, axis = 0))
print(np.sum(array, axis = 1))

# 出力
[[0 1 2]
 [3 4 5]]
15
[3 5 7]
[ 3 12]
```