numpy配列から別配列を取り出す練習

#はじめに
numpyの多次元配列の次元を落としたり，任意の２つの一元配列を取り出して分散図を書く練習をします．
ここではサイズ2×3×4の3次元の配列を題材とします．
インデックスはdata[z][y][x]のように，zからx方向に並びます．zは最大1,yは最大2,xは最大3となります．本記事における配列の図はすべて，奥行きをz，下方向yを，右方向をxとしています．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/a1777edc-53c8-266b-b279-813dacc80133.png" width=50%>


#練習
##練習1　題材となる3次元配列の生成
###問題
以下の図のようにdata[z][y][x]=(z+1)*100+(y*10)+(z+1)という値が設定されている3次元配列を生成してください．

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/9ff5248d-7b38-234c-5b7e-f22e7d7d7d48.png" width=50%>

###解答例
3重ループ文で書く場合

```python:q0.py
>>> data=np.zeros((2,3,4),dtype=np.int)
>>> for x in range(4):
...     for y in range(3):
...             for z in range(2):
...                     data[z][y][x]=(z+1)*100+(y+1)*10+x+1
```
内包表記でも書けます

```python:q1.py
>>> import numpy as np
>>> data=np.array([[[(z+1)*100+(y+1)*10+x+1 for x in range(4)] for y in range(3)] for z in range(2)])
>>> data
array([[[111, 112, 113, 114],
        [121, 122, 123, 124],
        [131, 132, 133, 134]],

       [[211, 212, 213, 214],
        [221, 222, 223, 224],
        [231, 232, 233, 234]]])
>>> data[1,2,3]
234
```


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/7247ff9c-7c6e-efb4-3efb-40ae67d0e5e1.png" width=50%>

##練習2　1次元配列（ベクトル）の取り出し
###問題2-1 赤色部分のデータを1元配列として取り出してください
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/803c949d-16ec-f620-8723-badeeb760bd4.png" width=50%>
###解答例2-1
```python:q2-1.py
>>> data[1,2,:]
array([231, 232, 233, 234])
#省略形
>>> data[1,2]
array([231, 232, 233, 234])
```
###問題2-2 赤色部分のデータを1元配列として取り出してください
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/7de20aa8-9fe0-13f5-a69b-72f723b8eae8.png" width=50%>
###解答例2-2
```python:q2-2.py
>>> data[1,:,2]
array([213, 223, 233])
```
###問題2-3 赤色部分のデータを1元配列として取り出してください
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/d9e3a829-fdb4-0b85-41fd-55f330a8310a.png" width=50%>
###解答例2-3
```python:q2-3.py
>>> data[:,1,2]
array([123, 223])
```
##練習3　2次元配列の取り出し
###問題3-1 赤色部分のデータを2元配列として取り出してください
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/e327c357-ae50-c648-d384-675947efdecf.png" width=50%>
###解答例3-1
```python:q3-1.py
>>> data[1,:,:]
array([[211, 212, 213, 214],
       [221, 222, 223, 224],
       [231, 232, 233, 234]])
#省略形
>>> data[1]
array([[211, 212, 213, 214],
       [221, 222, 223, 224],
       [231, 232, 233, 234]])
```
###問題3-2 赤色部分のデータを2元配列として取り出してください
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/b0f08152-4414-ed68-f6dd-300f22e27724.png" width=50%>
###解答例3-2
```python:q3-2.py
>>> data[:,1,:]
array([[121, 122, 123, 124],
       [221, 222, 223, 224]])
#省略形
>>> data[:,1]
array([[121, 122, 123, 124],
       [221, 222, 223, 224]])
```
###問題3-3 赤色部分のデータを2元配列として取り出してください
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/633ebac3-8b19-284c-2ce6-ec480abf045c.png" width=50%>
###解答例3-3
```python:q3-3.py
>>> data[:,:,1]
array([[112, 122, 132],
       [212, 222, 232]])
```

##練習4　スライス
###問題4-1　図のZ方向に取り出した1次元配列の最初の要素をスライスします
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/7068062c-1cc5-2a23-3075-b7baf2dc87eb.png" width=50%>
###解答例4-1
```python:q4-1.py
>>> data[1:,1,2]
array([223])
```
上の通り結果はスカラではなく配列です．
###問題4-2　図ように取り出した2次元配列のyの最初の要素をスライスします
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/1cba3efc-bf39-988f-ea12-954c2d4f9f8a.png" width=50%>
###解答例4-2
```python:q4-2.py
>>> data[:,1:,1]
array([[122, 132],
       [222, 232]])
```
###問題4-3　図ようにもとの配列をスライスします
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/4bc219b9-e5b2-32fe-5a6b-149be675601b.png" width=50%>
###解答例4-3
```python:q4-3.py
>>> data[:,:,1:3]
array([[[112, 113],
        [122, 123],
        [132, 133]],

       [[212, 213],
        [222, 223],
        [232, 233]]])
```
##練習5　分散図
###問題5-1 図の赤い部分を２つの1次元配列とみなして，その関係を分散図として表示してください．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/b0f08152-4414-ed68-f6dd-300f22e27724.png" width=50%>
###解答例5-1
```python:q5-1.py
>>> import matplotlib.pyplot as plt
>>> (data[0,1,:],data[1,1,:])
(array([121, 122, 123, 124]), array([221, 222, 223, 224]))
>>> plt.scatter(data[0,1,:],data[1,1,:])
<matplotlib.collections.PathCollection object at 0x0000019ACC48C208>
>>> plt.show()
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/105f1746-71f0-87a9-4dc3-853f485906fc.png" width=70%>


###問題5-2 図の赤い部分を２つの1次元配列とみなして，その関係を分散図として表示してください
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/633ebac3-8b19-284c-2ce6-ec480abf045c.png" width=50%>
###解答例5-2
```python:q5-2.py
>>> (data[0,:,1],data[1,:,1])
(array([112, 122, 132]), array([212, 222, 232]))
>>> plt.scatter(data[0,:,1],data[1,:,1])
<matplotlib.collections.PathCollection object at 0x0000019AC6F14A08>
>>> plt.show()
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/f320961a-83dd-3423-7630-4b77b333f1bc.png" width=70%>

###問題5-3 図の赤い部分を２つの1次元配列とみなして，その関係を分散図として表示してください
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/564afbf7-fca3-8f79-1544-347cdbe84435.png" width=50%>

###解答例5-3
```python:q5-3.py
>>> (data[:,1,2],data[:,2,2])
(array([123, 223]), array([133, 233]))
>>> plt.scatter(data[:,1,2],data[:,2,2])
<matplotlib.collections.PathCollection object at 0x0000019AC70D1808>
>>> plt.show()

```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135512/6b6e63ed-ce83-7c4c-b890-fb2e41746964.png" width=70%>