【问题标题】:fancy indexing multiple dimensions: Boolean Matrix for hypercube?花式索引多个维度:超立方体的布尔矩阵?
【发布时间】:2015-01-03 16:20:12
【问题描述】:

让我们假设以下示例:

import numpy as np
x = np.random.random([100,200,300,400])
c1 = np.arange(0,100,17)
c2 = np.arange(0,100,17)
c3 = np.arange(0,100,17)
c4 = np.arange(0,100,17)
q = (((x[c1,:,:,:])[:,c2,:,:])[:,:,c3,:])[:,:,:,c4]

这是查看thisthis 之后最低效的方法,这些告诉我将4d 数组分解为1d 然后只在一维中索引是个好主意。那么,没有更好的方法来实现我想要实现的目标吗?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    您可以使用np.ix_ 来构建适当的索引:

    >>> %timeit q = (((x[c1,:,:,:])[:,c2,:,:])[:,:,c3,:])[:,:,:,c4]
    1 loops, best of 3: 237 ms per loop
    >>> %timeit q = x[np.ix_(c1, c2, c3, c4)]
    100000 loops, best of 3: 19.3 µs per loop
    

    速度快几个数量级,但结果相同:

    >>> np.allclose((((x[c1,:,:,:])[:,c2,:,:])[:,:,c3,:])[:,:,:,c4], x[np.ix_(c1, c2, c3, c4)])
    True
    

    【讨论】:

    • 太棒了!这正是我所需要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多