Numpy无法执行以下索引:
a = np.arange(10)
a[-2: 2]
我现在做的不是很优雅,有没有什么诀窍或诀窍?
请注意,我不知道我的代码中是否会遇到这种情况,这种情况有时确实会发生,因此我正在寻找一种动态的、一劳永逸的解决方案,而不仅仅是针对这种情况的解决方案。
我的通用切片机,相当长。
def slicer(array, lower_, upper_):
n = len(array)
lower_ = lower_ % n # if negative, you get the positive equivalent. If > n, you get principal value.
roll = lower_
lower_ = lower_ - roll
upper_ = upper_ - roll
array_ = np.roll(array, -roll)
upper_ = upper_ % n
return array_[lower_: upper_]
3条答案
按热度按时间3duebb1j1#
看起来
np.r_
可以执行您想要的“滚动”操作:你所期望的和
r_
所做的可能有差异,我会让你研究它的文档。仅仅因为你称之为切片,它就不是
basic
索引。无论如何,结果都是copy
,而不是view
。注意多维索引的任何扩展。在寻找全大小写替换时要小心。使用负索引从末尾开始标记,而不进行 Package ,在Python和numpy中根深蒂固,因此您应该始终假设这是默认行为。
把你的 Package /卷的情况作为一个例外,一个需要特殊处理。
cfh9epnr2#
我认为这相对简单。
ioekq8ef3#
如果你知道长度,你可以把数组的长度加到lower和upper上,如果它们〈0的话。然后你可以检查upper是否小于lower,如果需要的话可以连接。