gpt4 book ai didi

python - 获取 NumPy 数组(或列表)的 "slices"长度而不实际切片

转载 作者:行者123 更新时间:2023-12-01 03:17:08 25 4
gpt4 key购买 nike

假设我有一个 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 和数组的长度),然后使用微分来获取间隔长度 -

np.diff(np.concatenate(([0], inds, [arr.size])))

更短的替代方案 -

np.diff(np.r_[0, inds, arr.size])

为了提高性能,我们可以使用一次性移位切片之间的差异来替换np.diff的差异 -

inds_ext = np.concatenate(([0], inds, [arr.size]))
out = inds_ext[1:] - inds_ext[:-1]

关于python - 获取 NumPy 数组(或列表)的 "slices"长度而不实际切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42370491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com