通过元组键列表使矩阵元素符号化

时间:2017-01-14 12:58:21

标签: python sorting numpy multidimensional-array

我有一个2dim数据库作为numpy.array(时间,字段值)。其次,我有一个元组的np.array,包含相同顺序的字段坐标。我现在要做的是重塑数据库,以便稍后我可以使用matplotlib.imshow()查看地图。 问题是,字段值不是定期分布的,也不是由函数分布的。只有这个密钥列表。

C方式只是运行一个循环。给出了该字段的最大尺寸。

#generating minimal dataset
data=np.random.rand(5,10)
keys=[]
maxdimx=5
maxdimy=5
for i in range(0,10):
    keys.append((np.random.random_integers(0,maxdimx-1),np.random.random_integers(0,maxdimy-1)))
#here just random keys are used, normaly there is a check for double entries

#horrible C-Style solution
def map_data(dimx,dimy,data,keys):
    maxt=data.shape[0]
    maped=np.zeros((maxt,maxdimx,maxdimy))
    for t in range(0,maxt):
        for i in range(0,len(keys)):
            maped[t,keys[i][0],keys[i][1]]=data[t,i]
    return maped

然而,对于大地图和更长的时间序列来说,这需要花费很长时间。 有没有办法把它放在矢量化函数中? 有没有numpy功能可以做到这一点?或者一些疯狂的索引? 由于每个时间点的排序是相同的,我认为可能存在这种可能性。

提前谢谢大家!

1 个答案:

答案 0 :(得分:2)

你问了!这是&em> crazy indexing 又名advanced-indexing的方法 -

k = np.asarray(keys)
out = np.zeros((maxt,maxdimx,maxdimy))
out[np.arange(maxt)[:,None],k[:,0],k[:,1]] = data