【備忘録】numpyのarrayについて

numpyのarrayについてまとめました。

# arrayの生成
リスト
```python
import numpy as np
a = np.array([1, 2, 3, 4])
a
#array([1, 2, 3, 4])
```

タプルも可
```python
np.array((2, 3, 5, 7))
#array([2, 3, 5, 7])
```





二重にネストした配列
```python
a = np.array([[11, 12, 13], [22, 33, 44]])
a
"""
array([[11, 12, 13],
       [22, 33, 44]])
"""
```

リストの要素にarrayを入れても大丈夫
```python
a = np.array([1, 1, 2, 3])
b = np.array([a, [5, 8, 13, 21]])
b
"""
array([[ 1,  1,  2,  3],
       [ 5,  8, 13, 21]])
"""
```

arange()で公差を指定して等差数列をつくる
```python
#np.arange(start, stop, step)
a = np.arange(100, 150, 13)
a
#array([100, 113, 126, 139])
```

linspace()で要素数を指定して等差数列をつくる。start、stop、num(要素数)に応じた公差が自動的に算出される。
```python
#np.linspace(start, stop, num(要素数))
a = np.linspace(0, 10, 5)
a
#array([ 0. ,  2.5,  5. ,  7.5, 10. ])
```

全て０のarray
```python
np.zeros(4)
#array([0., 0., 0., 0.])
```

全て１のarray
```python
np.ones(4)
#array([1., 1., 1., 1.])
```

zeros()、ones()にタプルを入れると多次元のarrayが返ってくる
```python
np.zeros((4,4))
"""
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
"""

np.ones((2,3))
"""
array([[1., 1., 1.],
       [1., 1., 1.]])
"""
```

空の要素のarrayをつくる。空と０は違う
```python
np.empty((3,3))
"""
array([[3.69634383e-316, 1.77863633e-322, 0.00000000e+000],
       [0.00000000e+000, 1.41370663e+190, 1.76009029e-076],
       [2.10653491e-052, 4.26881386e-090, 2.90130388e-057]])
"""
```

単位行列をつくる
```python
np.eye(5)
"""
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])
"""
```

要素の並びはそのままにして、次元や縦横の要素数をかえる
```python
a = np.arange(0, 15, 1)
a
#array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])


a.reshape(3, 5)
"""
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14]])
"""


a.reshape(3, 5)
"""
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
"""
```

乱数
```python
np.random.random((4, 4))
"""
array([[0.57205309, 0.23118043, 0.57137678, 0.5490131 ],
       [0.86643899, 0.44057519, 0.11017304, 0.47788537],
       [0.00391567, 0.74101721, 0.8236279 , 0.45663018],
       [0.24658771, 0.48127278, 0.7861596 , 0.75493337]])
"""
```

各成分を関数で指定
```python
def f(i, j):
    return i + j

np.fromfunction(f, (4, 3))
"""
array([[0., 1., 2.],
       [1., 2., 3.],
       [2., 3., 4.],
       [3., 4., 5.]])
"""
```

# 要素、行、列を取り出す
インデックスで指定
```python
a = np.arange(0, 12, 1).reshape(3,4)
a
"""
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
"""


a[0, 2]
#2
```

スライスで指定
```python
a[1:2]#1行目から２行目（終わりは含まない）
#array([[4, 5, 6, 7]])


a[1:3, 0:3]#1行目から3行目、0列目から３列目まで
"""
#array([[ 4,  5,  6],
       [ 8,  9, 10]])
"""


a[2, :]#行だけ取得
#array([ 8,  9, 10, 11])


a[:, 3]#列だけ取得
#array([ 3,  7, 11])
```

# arrayの属性
属性ndimで次元数を整数で取得できる。


```python
a = np.arange(0, 12, 1).reshape(3,4)
a
"""
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
"""

a.ndim
#2

type(a.ndim)
#int
```
属性shapeで各次元のサイズをタプルで取得できる。
```python
a.shape
#(3, 4)

type(a.shape)
#tuple
```


属性sizeで全要素数を整数で取得できる。
```python
a.size
#12

type(a.size)
#int
```