1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

はじめに

numpyの多次元配列の次元を落としたり,任意の2つの一元配列を取り出して分散図を書く練習をします.
ここではサイズ2×3×4の3次元の配列を題材とします.
インデックスはdata[z][y][x]のように,zからx方向に並びます.zは最大1,yは最大2,xは最大3となります.本記事における配列の図はすべて,奥行きをz,下方向yを,右方向をxとしています.

練習

練習1 題材となる3次元配列の生成

問題

以下の図のようにdata[z][y][x]=(z+1)100+(y10)+(z+1)という値が設定されている3次元配列を生成してください.

解答例

3重ループ文で書く場合

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

内包表記でも書けます

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

練習2 1次元配列(ベクトル)の取り出し

問題2-1 赤色部分のデータを1元配列として取り出してください

### 解答例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元配列として取り出してください ### 解答例2-2 ```python:q2-2.py >>> data[1,:,2] array([213, 223, 233]) ``` ### 問題2-3 赤色部分のデータを1元配列として取り出してください ### 解答例2-3 ```python:q2-3.py >>> data[:,1,2] array([123, 223]) ``` ## 練習3 2次元配列の取り出し ### 問題3-1 赤色部分のデータを2元配列として取り出してください ### 解答例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元配列として取り出してください ### 解答例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元配列として取り出してください ### 解答例3-3 ```python:q3-3.py >>> data[:,:,1] array([[112, 122, 132], [212, 222, 232]]) ```

練習4 スライス

問題4-1 図のZ方向に取り出した1次元配列の最初の要素をスライスします

### 解答例4-1 ```python:q4-1.py >>> data[1:,1,2] array([223]) ``` 上の通り結果はスカラではなく配列です. ### 問題4-2 図ように取り出した2次元配列のyの最初の要素をスライスします ### 解答例4-2 ```python:q4-2.py >>> data[:,1:,1] array([[122, 132], [222, 232]]) ``` ### 問題4-3 図ようにもとの配列をスライスします ### 解答例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 図の赤い部分を2つの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()

問題5-2 図の赤い部分を2つの1次元配列とみなして,その関係を分散図として表示してください

### 解答例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]) >>> plt.show() ```

問題5-3 図の赤い部分を2つの1次元配列とみなして,その関係を分散図として表示してください

解答例5-3

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()

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?