リストのリストが与えられた場合、各リストの長さは
M = [[1,2,3,4,4,5,1,2,9,0], [3,2,1,0,5,6,2,4,6,7], [4,5,5,2,1,2,3,4,2,4], [7,5,6,2,6,7,8,8,8,1] ]
要素の繰り返し回数を数えて、それを別のマトリックスに送りたいと思います。
frame
各リストを として、フレーム内の要素をとして呼び出しましょうstates
。
これが私のコードで、正常に動作します:
import numpy as np
from collections import Counter
import numpy as np
from xarray import DataArray
def Vfinal(s_t,Matrix):
state_no = np.arange(0,s_t)
frame_no = np.arange(0,len(Matrix))
V= DataArray(np.zeros(( len(state_no),len(Matrix) )), coords=[('States_count', state_no), ('Frame',frame_no)])
for i,j in enumerate(Matrix):
for k in j:
print(k,i)
V.loc[k,i] +=1
return V
In [172]: V = Vfinal(10,M)
In [173]: V
Out[173]:
<xarray.DataArray (States_count: 10, Frame: 4)>
array([[ 1., 1., 0., 0.],
[ 2., 1., 1., 1.],
[ 2., 2., 3., 1.],
[ 1., 1., 1., 0.],
[ 2., 1., 3., 0.],
[ 1., 1., 2., 1.],
[ 0., 2., 0., 2.],
[ 0., 1., 0., 2.],
[ 0., 0., 0., 3.],
[ 1., 0., 0., 0.]])
Coordinates:
* States_count (States_count) int64 0 1 2 3 4 5 6 7 8 9
* Frame (Frame) int64 0 1 2 3
私の場合、リストM
には が28,800 lists
あり、各リストには 75 個の要素 (0 から 499 までの数字) が含まれています。
これにより、マトリックスのサイズは 500X 28,800 になります。コードが完了するまでに約 30 分かかります。問題はループにあると思います。for
コードをより高速に実行できるように効率的に記述する方法はありますか?