当前位置: 首页 > 面试题库 >

如何从具有周期性边界条件的numpy数组中选择一个窗口?

全鸿晖
2023-03-14
问题内容

假设我制作一个二维数组,如下所示:

>>> A=np.arange(16).reshape((4,4))
>>> A
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

并且我希望能够围绕任何给定的元素选择一个3x3的窗口,以便该窗口围绕边界包裹,我该怎么做?我知道如果窗口的边界不与原始数组的边界重叠,我可以这样做:

>>> A[1:4,0:3]
array([[ 4,  5,  6],
       [ 8,  9, 10],
       [12, 13, 14]])

但是,如果我使用类似的表达式,A[i-1:i+2,j-1:j+2]则仅对于i = 0,例如j = 0,返回一个空数组。


问题答案:
import numpy as np

A=np.arange(16).reshape((4,4))

def neighbors(arr,x,y,n=3):
    ''' Given a 2D-array, returns an nxn array whose "center" element is arr[x,y]'''
    arr=np.roll(np.roll(arr,shift=-x+1,axis=0),shift=-y+1,axis=1)
    return arr[:n,:n]

print(A)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [12 13 14 15]]

print(neighbors(A,0,0))
# [[15 12 13]
#  [ 3  0  1]
#  [ 7  4  5]]

print(neighbors(A,1,0))
# [[ 3  0  1]
#  [ 7  4  5]
#  [11  8  9]]


 类似资料:
  • 问题内容: 我有一个很大的数组,其中每一行都是一个时间序列,因此需要保持秩序。 我想为每行选择一个给定大小的随机窗口。 在我看来,理想的解决方案是: 但不幸的是,这不起作用 我现在要进行的操作非常慢: 当然,我可以对列表进行理解(并获得最小的速度提升),但是我想知道是否有某种超级聪明的numpy向量化方​​法可以做到这一点。 问题答案: 这是一种杠杆作用- 在具有行的更大数组上进行运行时测试-

  • 问题内容: 我有大量的数据,需要比较该数组中所有样本的距离与该数组中所有其他元素的距离。以下是我的数据集的一个非常简单的示例。 有没有一种方法可以为非示例索引的索引建立一个numpy数组?在上面的示例中,我创建了一个名为other_indexes的列表。由于各种原因,我宁愿不必这样做(大型数据集,线程,正在运行的系统上的内存非常低等,等等)。有没有办法做类似的事情.. 我读到numpy面具可以做到

  • 问题内容: 我正在使用和在CSS中创建一个半透明的圆圈。 在这个圆的周围,我希望有另一个完全透明的边界(例如10个像素),而又想有另一个半透明的边界(10个像素)。 这是我创建圈子的方式: 我需要怎么做才能在现有边界周围创建另一个边界,然后再创建另一个边界? 问题答案: 您可以使用简单的边框并将背景裁剪到,以在填充区域中创建透明部分: 您也可以考虑 您可以轻松缩放到任意数量的边界:

  • 问题内容: 我有两个相关的numpy数组和。我需要从中选择随机行,并将其存储在数组中,并将其对应的值附加到随机选择的点的索引上。 我有另一个数组,它存储我不想采样的索引列表。 我怎样才能做到这一点? 样本数据: 如果这些是随机选择的(其中): 所需的输出将是: 我怎样才能做到这一点? 问题答案: 您可以使用以下方法创建随机索引: 然后,您只需要使用结果索引数组:

  • 我尝试在数据帧“df_energy”中添加一个新的列“energy_class”,如果“consumpion_energy”值为 有什么办法可以帮我吗? 先谢谢你

  • 问题内容: 我有一个元组列表。每个元组都有5个元素(对应于5个数据库列),我想进行查询 例如 是否可以通过某种方式查询元组列表? 问题答案: 如果您已命名元组,则可以执行以下操作: 否则使用索引: 或者按照Nate的答案使用元组拆包。请注意,您不必为每个拆开的物品都赋予一个有意义的名称。您可以打开一个六项元组的包装。