NxN python数组子集

NxN python数组子集,python,arrays,slice,Python,Arrays,Slice,我需要对NxN数组的子集执行一些操作。我有子数组的中心,x和y,以及它的大小 因此,我可以轻松做到: subset=data[y-size:y+size,x-size:x+size] 这很好 我要问的是,如果x和y都是一维位置数组,是否有可能在不编写显式循环的情况下执行相同的操作 谢谢 使用一个5x5数组的简单示例,并将大小设置为1,我们可以得到: import numpy as np data = np.arange(25).reshape((5,5)) size = 1 x = np.ar

我需要对
NxN数组的子集执行一些操作。我有子数组的中心,
x
y
,以及它的大小

因此,我可以轻松做到:

subset=data[y-size:y+size,x-size:x+size]

这很好

我要问的是,如果
x
y
都是一维位置数组,是否有可能在不编写显式循环的情况下执行相同的操作


谢谢

使用一个5x5数组的简单示例,并将大小设置为1,我们可以得到:

import numpy as np
data = np.arange(25).reshape((5,5))

size = 1
x = np.array([1,4])
y = np.array([1,4])
subsets = [data[j-size:j+size,i-size:i+size] for i in x for j in y]

print(subsets)
返回numpy数组的列表:

[array([[0, 1],[5, 6]]),
 array([[15, 16],[20, 21]]),
 array([[3, 4],[8, 9]]),
 array([[18, 19],[23, 24]])]

我希望这就是您想要的。

使用5x5阵列的简单示例,并将大小设置为1,我们可以得到:

import numpy as np
data = np.arange(25).reshape((5,5))

size = 1
x = np.array([1,4])
y = np.array([1,4])
subsets = [data[j-size:j+size,i-size:i+size] for i in x for j in y]

print(subsets)
返回numpy数组的列表:

[array([[0, 1],[5, 6]]),
 array([[15, 16],[20, 21]]),
 array([[3, 4],[8, 9]]),
 array([[18, 19],[23, 24]])]

我希望这就是您要查找的内容。

要获取子集列表,假设您有位置列表
xList
yList
,这将执行以下操作:

subsetList = [ data[y-size:y+size,x-size:x+size] for x,y in zip(xList,yList) ]

要获取子集列表,假设您有位置列表
xList
yList
,这将执行以下操作:

subsetList = [ data[y-size:y+size,x-size:x+size] for x,y in zip(xList,yList) ]

预期的结果是什么?预期的结果是什么?是的,这和前面的答案肯定有效(谢谢!)。然而,我想知道是否有某种numpy方法可以使这个操作更快。让我们假设,例如,我需要计算每个子集的平均值。我确实希望像np.mean(数据[y-size:y+size,x-size:x+size])这样的东西能给我一系列结果。但是,这当然不起作用。上面每个子集的平均值可以简单地通过以下公式计算:'subset_ave=[np.mean(sub)for subset in subsets]'返回平均值(means)的列表是的,这和前面的答案肯定有效(谢谢!)。然而,我想知道是否有某种numpy方法可以使这个操作更快。让我们假设,例如,我需要计算每个子集的平均值。我确实希望像np.mean(数据[y-size:y+size,x-size:x+size])这样的东西能给我一系列结果。但是,当然,这是行不通的。上面每个子集的平均值可以简单地通过以下公式计算:'subset_ave=[np.mean(sub)for subset in subsets]'返回平均值(means)列表