我正在寻找一种在Numpy中线性索引和多维索引之间进行相互转换的快速方法。多维和线性索引之间的Numpy相互转换
为了使我的用法具体,我有一个N个粒子的大量集合,每个粒子分配5个浮点值(维度),给出一个Nx5数组。然后,我使用numpy.digitize每个维度使用适当的边界边界选择,为每个粒子在5维空间中分配一个bin。
N = 10
ndims = 5
p = numpy.random.normal(size=(N,ndims))
for idim in xrange(ndims):
bbnds[idim] = numpy.array([-float('inf')]+[-2.,-1.,0.,1.,2.]+[float('inf')])
binassign = ndims*[None]
for idim in xrange(ndims):
binassign[idim] = numpy.digitize(p[:,idim],bbnds[idim]) - 1
binassign然后包含对应于多维索引的行。如果我当时想多维指标转换为线性指标,我想我会想要做的事,如:
linind = numpy.arange(6**5).reshape(6,6,6,6,6)
这将使查找每个多维指数把它映射到线性指标。然后,您可以回去使用:
mindx = numpy.unravel_index(x,linind.shape)
在那里我遇到困难是搞清楚如何利用binassign(NX5的数组)包含每一行的多维指标,即coverting到一维线性指标,由用它来分割线性索引数组linind。
如果任何人有一个(或几个)行索引技巧来在多维索引和线性索引之间来回切换,以向所有N个粒子矢量化操作的方式,我将不胜感激您的洞察力。
谢谢,我概括你的建议,我自己的解决方案。 – JoshAdel 2010-07-16 00:46:10