numpy.unravel_index()将一个shape和一个平面索引放入一个数组中,并返回表示该数组中该索引的元组。有反转吗?我可以手动计算它,但这似乎必须是某个内置功能...
答案 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)
答案在于numpy.ndarray.strides。见http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.strides.html
答案 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分别是包含感兴趣的索引和被索引的矩阵的元组。在拍摄切片时,这没有与步幅相关的上述问题。