我将几个二维数据数组加载到NumPy数组中,它们的维度都是相同的,这些共享维度是2606x和1228y。
我感兴趣的是在移动窗口中计算前两个数组(a1和a2)之间的计算,使用大小为2x x x 2y的窗口,然后将结果计算应用于第三个数组。
1.求出a1在该移动窗口段上的最大值和最小值
1.选择这些值对应的数组索引
1.提取a2的这些索引处的值
1.将计算结果投射到移动窗口内的第三数组(a3)中的每个索引。
我知道这个过程涉及到以下几段代码来获取我需要的值:
idx1 = np.where(a1 == a1.max())
idx2 = np.where(a1 == a1.min())
val1 = a2[idx1[1], idx1[2]]
val2 = a2[idx2[1], idx2[2]]
要沿着相同大小的数组执行此移动窗口,还需要哪些代码?
1条答案
按热度按时间tzdcorbm1#
由于数组形状可以被窗口大小整除,因此可以使用
numpy.reshape
将数组拆分为多个小窗口,从而使原始数组形状(2606, 1228)
变为(2606/2, 2, 1228/2, 2)
。如果
numpy.argmin
接受轴序列,这将更容易,但由于它只接受一个轴(或None
,但我们不希望这样),我们需要将两个窗口轴压缩成一个轴。为此,我们使用numpy.moveaxis
使形状(2606/2, 1228/2, 2, 2)
,然后再次使用numpy.reshape
将最后两个轴展平成(2606/2, 1228/2, 4)
。解决了这个问题后,我们可以使用最后一个轴上的
numpy.argmin
和numpy.argmax
来计算您感兴趣的索引,并使用高级索引将a2
的相应值写入a3
。之后,我们只需撤消对a3
执行的reshape
和moveaxis
操作。产出