如何在考虑边界的情况下获取numpy数组中的相邻元素?

发布于 2021-01-29 16:03:24

我想获取numpy数组中某些元素的邻居。让我们考虑以下示例

    a = numpy.array([0,1,2,3,4,5,6,7,8,9])

因此,我想指定位置5,并希望从双方获得三个邻居。可以办到

   index = 5
   num_neighbor=3
   left = a[index-num_neighbor:index]
   right= a[num_neighbor+1:num_neighbor+index+1]

上面的代码没有考虑边界…我希望我在数组的边界内得到邻居。为此,请考虑以下示例,如果index为1,则左邻居仅是一个元素,该元素为0。

非常感谢

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    import numpy as np
    a = np.array([0,1,2,3,4,5,6,7,8,9])
    num_neighbor=3
    
    for index in range(len(a)):
        left = a[:index][-num_neighbor:]
        right= a[index+1:num_neighbor+index+1]
        print(index,left,right)
    

    产量

    (0, array([], dtype=int32), array([1, 2, 3]))
    (1, array([0]), array([2, 3, 4]))
    (2, array([0, 1]), array([3, 4, 5]))
    (3, array([0, 1, 2]), array([4, 5, 6]))
    (4, array([1, 2, 3]), array([5, 6, 7]))
    (5, array([2, 3, 4]), array([6, 7, 8]))
    (6, array([3, 4, 5]), array([7, 8, 9]))
    (7, array([4, 5, 6]), array([8, 9]))
    (8, array([5, 6, 7]), array([9]))
    (9, array([6, 7, 8]), array([], dtype=int32))
    

    什么时候a[index- num_neighbor:index]不起作用的原因index<num_neighbor是由于切片规则#3和#4

    鉴于s[i:j]

    如果i或j为负,则索引相对于字符串的结尾:len(s)+ i或len(s)+ j被替换。

    从i到j的s切片被定义为索引为k的项目序列,使得i <= k
    <j。如果i或j大于len,请使用len。如果省略i或无,则使用0。如果省略j或无,则使用len(s)。如果i大于或等于j,则切片为空。

    所以什么时候index=1a[index-num_neighbor:index] = a[-2:1] = a[10-2:1] = a[8:1] = []



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看