gpt4 book ai didi

python - 在数组边界上切片 ndarrays

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

问题:

给定一个数组:

In [2]: a
Out[2]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

我寻找一个例程给我:

array([7, 8, 9, 0, 1])

Ex.: 从索引 8 开始,穿过数组边界并在索引 2 处停止(包括在内)如果我使用切片,我(当然)会得到:

In [3]: a[-3:2]
Out[3]: array([], dtype=int64)

一个可能的答案:

就是使用滚动功能。

In [5]: np.roll(a,3)[:5]
Out[5]: array([7, 8, 9, 0, 1])

我在寻找什么:

关于这个,我不喜欢的是它不像切片那么简单。所以我寻找类似的东西:

In [6]: a.xxx[-3:2]

例如 pandas.DataFrame.iloc 中存在与此类似的语法.非常感谢您!

注意:iloc,不做我想做的事。我只是引用了语法(我喜欢)。感谢评论,cᴏʟᴅsᴘᴇᴇᴅ

最佳答案

在 python/numpy 中没有任何切片机制可以自动环绕列表/数组(作为圆形容器),因为您似乎正在寻找,所以真正做到这一点的唯一方法是使用函数。你用 roll 做的事情既漂亮又紧凑,即使它不像你喜欢的那样地道。下面,我概述了几个(稍微多一些)惯用/pythonic 解决方案,它们做同样的事情。

选项 1
np.take 基于 hpaulj's comment :

np.take(a, range(len(a) - 3, len(a) + 2), mode='wrap')
array([7, 8, 9, 0, 1])

选项 2
islicecycle 对象:

from itertools import islice, cycle

list(islice(cycle(a), len(a) - 3, len(a) + 2))
[7, 8, 9, 0, 1]

关于python - 在数组边界上切片 ndarrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48659161/

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