相关疑难解决方法(0)

Python列表/数组:禁用切片中的负索引环绕

虽然我发现负数环绕(即A[-2]索引倒数第二个元素)在许多情况下非常有用,但当它发生在切片内时,它通常比一个有用的功能更令人烦恼,我经常希望有一种方法禁用该特定行为.

这是下面的一个罐装2D示例,但我与其他数据结构和其他维度的数量相同.

import numpy as np
A = np.random.randint(0, 2, (5, 10))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

def foo(i, j, r=2):
  '''sum of neighbours within r steps of A[i,j]'''
  return A[i-r:i+r+1, j-r:j+r+1].sum()
Run Code Online (Sandbox Code Playgroud)

在上面的切片中,我宁愿切片的任何负数都将被视为相同None,而不是包装到数组的另一端.

由于包装,上面的其他好的实现在边界条件下给出了不正确的结果,并且需要某种补丁,例如:

def ugly_foo(i, j, r=2):
  def thing(n):
    return None if n < 0 else n
  return A[thing(i-r):i+r+1, thing(j-r):j+r+1].sum()
Run Code Online (Sandbox Code Playgroud)

我还尝试对数组或列表进行零填充,但它仍然不够优雅(需要相应地调整查找位置索引)并且效率低(需要复制数组).

我错过了一些像这样切片的标准技巧或优雅解决方案吗?我注意到python和numpy已经处理了一个很好地指定太大数字的情况 - 也就是说,如果索引大于数组的形状,它的行为就像它一样None.

python arrays numpy list slice

11
推荐指数
2
解决办法
5766
查看次数

标签 统计

arrays ×1

list ×1

numpy ×1

python ×1

slice ×1