假设我有一个NumPy数组arr
,如
array([5, 3, 0, 5, 7, 6, 5, 9, 0, 6])
和另一个数组中包含的一些索引inds
,
array([3, 6])
我想生成一个数组,其中arr
的子数组的长度为我将数组与inds
分开。所以在这种情况下,我的结果是[3, 3, 4]
。
我知道我可以使用np.split
来做
>>> np.split(arr, inds)
[array([5, 3, 0]), array([5, 7, 6]), array([5, 9, 0, 6])]
并映射size()
以从中获取[3, 3, 4]
的正确结果,但似乎实际分割数组是不必要的代价,因为我是只使用子阵列的大小 - 这些信息显然可以在不分割的情况下(从索引中获得),但我怎样才能有效地使用它?
答案 0 :(得分:2)
一种方法,在索引数组的两边连接端点(0和数组的长度),然后使用差异来获得间隔长度 -
np.diff(np.concatenate(([0], inds, [arr.size])))
更短的替代方案 -
np.diff(np.r_[0, inds, arr.size])
为了表现,我们可以使用one-off shifted slices
之间的差异来用np.diff
替换区别 -
inds_ext = np.concatenate(([0], inds, [arr.size]))
out = inds_ext[1:] - inds_ext[:-1]