【发布时间】:2016-05-31 04:50:42
【问题描述】:
我需要对NxN array 的子集执行一些操作。我有子数组的中心x 和y,以及它的大小。
所以我可以轻松做到:
subset = data[y-size:y+size,x-size:x+size]
这很好。
我要问的是,如果x 和y 都是一维位置数组,是否有可能在不编写显式循环的情况下做同样的事情。
谢谢!
【问题讨论】:
-
预期结果是什么?
我需要对NxN array 的子集执行一些操作。我有子数组的中心x 和y,以及它的大小。
所以我可以轻松做到:
subset = data[y-size:y+size,x-size:x+size]
这很好。
我要问的是,如果x 和y 都是一维位置数组,是否有可能在不编写显式循环的情况下做同样的事情。
谢谢!
【问题讨论】:
使用一个简单的 5x5 数组示例并设置 size=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]])]
我希望这是您正在寻找的。p>
【讨论】:
要获得子集列表,假设您有职位列表xList 和yList,这将完成:
subsetList = [ data[y-size:y+size,x-size:x+size] for x,y in zip(xList,yList) ]
【讨论】: