小编eve*_*mer的帖子

Python大数据矩阵操作

我想我有一个大数据(N = 1e6和维度= 3)的情况.我需要在我的代码中多次执行一些矩阵操作,例如einsum,矩阵反转等.提出一个想法,我想做下面的事情.

import numpy.random as rd

ndata, kdata = 1e6, 1e5

x = rd.normal(0,1,(ndata, kdata,3,3))

y = rd.normal(0,1,(ndata, kdata,3,3))
Run Code Online (Sandbox Code Playgroud)

对于小ndata,kdata以下将是高效和方便的方法,

xy =  einsum('pqrs, pqsu -> pqru', x, y )
Run Code Online (Sandbox Code Playgroud)

由于我有大的ndata和kdata以上方法成为内存绑定问题所以下一个赌注将是嵌套for循环ndata和kdata的点积,如下所示:

xyloop1 = np.empty((ndata, kdata, 3, 3))

for j in xrange(ndata):

    for k in xrange(kdata):

        xyloop1[j,k] =  np.dot(x[j,k], y[j,k] )
Run Code Online (Sandbox Code Playgroud)

鉴于我所教授的循环在python中是令人讨厌的.此外,我想使用numpy的好处,所以思想块矩阵方法将是更好的事情如下:

nstep = 200
ndiv  = ndata/nstep   

kstep = 200
kdiv  = kdata/kstep   

xyloop2 = np.empty((ndata, kdata, 3, 3))

for j in xrange(ndiv):

    ji, jf = j*nstep, (j+1)*nstep     

    for …
Run Code Online (Sandbox Code Playgroud)

python numpy matrix

5
推荐指数
1
解决办法
278
查看次数

标签 统计

matrix ×1

numpy ×1

python ×1