2019年8月25日日曜日

numpy での処理

python で3次元配列を扱うことが立て続けにありました。

これらを空間方向、時間軸方向に扱う処理方法が求められます。が、最初は効率的な方法がわかりませんでした(そもそも、3次元配列に整形する段階で躓きました)。

意外と web 上に情報がなかったので、最終的に採用した numpy での処理方法を書き残しておきます。
******************************************

In [1]:
import numpy as np
In [2]:
x1=np.array([[1,1,1],[2,2,2],[3,3,3]])
x2=np.array([[11,11,11],[22,22,22],[33,33,33]])
x3=np.array([[111,111,111],[222,222,222],[333,333,333]])
In [3]:
x=np.array([x1,x2,x3])
np.shape(x)
Out[3]:
(3, 3, 3)
In [4]:
x
Out[4]:
array([[[  1,   1,   1],
        [  2,   2,   2],
        [  3,   3,   3]],

       [[ 11,  11,  11],
        [ 22,  22,  22],
        [ 33,  33,  33]],

       [[111, 111, 111],
        [222, 222, 222],
        [333, 333, 333]]])
In [5]:
x[:,0,0]
Out[5]:
array([  1,  11, 111])
In [6]:
xx=[]
xx.append(x1.copy())
xx.append(x2.copy())
xx.append(x3.copy())
xx=np.array(xx)
np.shape(xx)
Out[6]:
(3, 3, 3)
In [7]:
xx
Out[7]:
array([[[  1,   1,   1],
        [  2,   2,   2],
        [  3,   3,   3]],

       [[ 11,  11,  11],
        [ 22,  22,  22],
        [ 33,  33,  33]],

       [[111, 111, 111],
        [222, 222, 222],
        [333, 333, 333]]])
In [8]:
xx[:,0,0]
Out[8]:
array([  1,  11, 111])
In [9]:
np.mean(xx,axis=0)
Out[9]:
array([[ 41.,  41.,  41.],
       [ 82.,  82.,  82.],
       [123., 123., 123.]])
In [10]:
np.mean(xx,axis=1)
Out[10]:
array([[  2.,   2.,   2.],
       [ 22.,  22.,  22.],
       [222., 222., 222.]])
In [11]:
np.mean(xx,axis=2)
Out[11]:
array([[  1.,   2.,   3.],
       [ 11.,  22.,  33.],
       [111., 222., 333.]])
In [12]:
np.mean(xx,axis=(1,2))
Out[12]:
array([  2.,  22., 222.])
In [13]:
np.mean(xx,axis=(0,1))
Out[13]:
array([82., 82., 82.])

0 件のコメント:

コメントを投稿