NumPy是否具有unravel_index()的反转?

时间:2010-11-06 18:22:48

标签: python numpy

numpy.unravel_index()将一个shape和一个平面索引放入一个数组中,并返回表示该数组中该索引的元组。有反转吗?我可以手动计算它,但这似乎必须是某个内置功能...

4 个答案:

答案 0 :(得分:7)

numpy 1.6.0(2011年5月)以来,内置NumPy函数ravel_multi_index

  

将索引数组的元组转换为平面索引数组,将边界模式应用于多索引。

(这在用户Bi Rico的评论中也有提及,但应该真的作为答案出现)

答案 1 :(得分:3)

这有效:

def ravel_index(pos, shape):
    res = 0
    acc = 1
    for pi, si in zip(reversed(pos), reversed(shape)):
        res += pi * acc
        acc *= si
    return res

答案 2 :(得分:2)

答案 3 :(得分:1)

这不是内置命令,但我总是使用以下代码段,假设使用了numpy的默认行主索引:

np.sum(np.array(index_tuple[:-1])*np.array(a_matrix.shape[1:]))+np.array(index_tuple[-1])

对于Fortan-like(列主要)索引,只需要交换索引:

np.sum(np.array(index_tuple[1:])*np.array(a_matrix.shape[:-1]))+np.array(index_tuple[0])

在上文中,index_tuple和a_matrix分别是包含感兴趣的索引和被索引的矩阵的元组。在拍摄切片时,这没有与步幅相关的上述问题。