gpt4 book ai didi

Python/Numpy 快速选择列表中第 n 个 block 的方法

转载 作者:太空宇宙 更新时间:2023-11-03 15:02:04 24 4
gpt4 key购买 nike

针对问题的困惑进行了编辑,感谢您的解答!

我最初的问题是我有一个列表 [1,2,3,4,5,6,7,8],我想选择每个大小为 x 且间隙为 1 的 block 。因此,如果我想选择每隔一个大小为 2 的 block ,结果将是 [1,2,4,5,7,8]。三 block 大小会给我 [1,2,3,5,6,7]。

我在切片方面进行了很多搜索,但找不到一种方法来选择 block 而不是元素。进行多个切片操作然后连接和排序似乎有点太昂贵了。输入可以是 python 列表或 numpy ndarray。提前致谢。

最佳答案

在我看来,您想在 block 之间跳过一个元素,直到输入列表或数组的末尾。

这是一种基于 np.delete 的方法删除 block 之间挤压的单个元素 -

out = np.delete(A,np.arange(len(A)/(x+1))*(x+1)+x)

这是另一种基于 boolean-indexing 的方法-

L = len(A)
avoid_idx = np.arange(L/(x+1))*(x+1)+x
out = np.array(A)[~np.in1d(np.arange(L),avoid_idx)]

sample 运行-

In [98]: A = [51,42,13,34,25,68,667,18,55,32] # Input list

In [99]: x = 2

# Thus, [51,42,13,34,25,68,667,18,55,32]
^ ^ ^ # Skip these

In [100]: np.delete(A,np.arange(len(A)/(x+1))*(x+1)+x)
Out[100]: array([ 51, 42, 34, 25, 667, 18, 32])

In [101]: L = len(A)
...: avoid_idx = np.arange(L/(x+1))*(x+1)+x
...: out = np.array(A)[~np.in1d(np.arange(L),avoid_idx)]
...:

In [102]: out
Out[102]: array([ 51, 42, 34, 25, 667, 18, 32])

关于Python/Numpy 快速选择列表中第 n 个 block 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36827155/

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