【问题标题】:NxN python arrays subsetsNxN python 数组子集
【发布时间】:2016-05-31 04:50:42
【问题描述】:

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

所以我可以轻松做到:

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

这很好。

我要问的是,如果xy 都是一维位置数组,是否有可能在不编写显式循环的情况下做同样的事情。

谢谢!

【问题讨论】:

  • 预期结果是什么?

标签: python arrays slice


【解决方案1】:

使用一个简单的 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>

【讨论】:

  • 是的,这个和之前的答案肯定有效(谢谢!)。但是我想知道是否有某种 numpy 方法可以使此操作更快。例如,假设我需要计算每个子集的平均值。我确实希望像 np.mean(data[y-size:y+size,x-size:x+size]) 这样的东西可以给我返回一系列结果。但是,这当然行不通。
  • 上述每个子集的平均值可以简单地计算为:'subset_ave = [np.mean(sub) for sub in subsets]' 返回平均值列表(均值)跨度>
【解决方案2】:

要获得子集列表,假设您有职位列表xListyList,这将完成:

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

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多