Quantcast
Channel: 配列タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 757

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

$
0
0

はじめに

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+(y*10)+(z+1)という値が設定されている3次元配列を生成してください.

解答例

3重ループ文で書く場合

q0.py
>>>data=np.zeros((2,3,4),dtype=np.int)>>>forxinrange(4):...foryinrange(3):...forzinrange(2):...data[z][y][x]=(z+1)*100+(y+1)*10+x+1

内包表記でも書けます

q1.py
>>>importnumpyasnp>>>data=np.array([[[(z+1)*100+(y+1)*10+x+1forxinrange(4)]foryinrange(3)]forzinrange(2)])>>>dataarray([[[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

q2-1.py
>>>data[1,2,:]array([231,232,233,234])#省略形
>>>data[1,2]array([231,232,233,234])

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

解答例2-2

q2-2.py
>>>data[1,:,2]array([213,223,233])

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

解答例2-3

q2-3.py
>>>data[:,1,2]array([123,223])

練習3 2次元配列の取り出し

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

解答例3-1

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

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

q3-3.py
>>>data[:,:,1]array([[112,122,132],[212,222,232]])

練習4 スライス

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

解答例4-1

q4-1.py
>>>data[1:,1,2]array([223])

上の通り結果はスカラではなく配列です.

問題4-2 図ように取り出した2次元配列のyの最初の要素をスライスします

解答例4-2

q4-2.py
>>>data[:,1:,1]array([[122,132],[222,232]])

問題4-3 図ようにもとの配列をスライスします

解答例4-3

q4-3.py
>>>data[:,:,1:3]array([[[112,113],[122,123],[132,133]],[[212,213],[222,223],[232,233]]])

練習5 分散図

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

解答例5-1

q5-1.py
>>>importmatplotlib.pyplotasplt>>>(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.PathCollectionobjectat0x0000019ACC48C208>>>>plt.show()

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

解答例5-2

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.PathCollectionobjectat0x0000019AC6F14A08>>>>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.PathCollectionobjectat0x0000019AC70D1808>>>>plt.show()


Viewing all articles
Browse latest Browse all 757

Trending Articles