相关疑难解决方法(0)

多维和线性索引之间的Numpy互换

我正在寻找一种在Numpy中线性和多维索引之间进行互换的快速方法.

为了使我的用法具体化,我有一个大的N个粒子集合,每个粒子分配5个浮点值(维度),给出一个Nx5数组.然后,我使用numpy.digitize并使用适当选择的bin边界来对每个维度进行分区,以便为每个粒子分配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
Run Code Online (Sandbox Code Playgroud)

然后binassign包含与多维索引对应的行.如果我想将多维索引转换为线性索引,我想我会想做类似的事情:

linind = numpy.arange(6**5).reshape(6,6,6,6,6)
Run Code Online (Sandbox Code Playgroud)

这将查找每个多维索引以将其映射到线性索引.然后你可以回去使用:

mindx = numpy.unravel_index(x,linind.shape)
Run Code Online (Sandbox Code Playgroud)

我遇到困难的地方是弄清楚如何在每行中包含多维索引的binassign(Nx5数组),并将其转换为1d线性索引,方法是使用它来切割线性索引数组linind.

如果有人有一个(或几个)行索引技巧在多维索引和线性索引之间来回传递,其方式是对所有N个粒子进行矢量化操作,我将非常感谢您的见解.

python indexing numpy

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

标签 统计

indexing ×1

numpy ×1

python ×1