gpt4 book ai didi

python - 如何查找重叠 numpy 数组的索引和最大值

转载 作者:行者123 更新时间:2023-11-30 21:59:25 29 4
gpt4 key购买 nike

我有两个具有相同形状的 numpy 数组。一种带有值,一种带有“区域”。我需要找到 valuearr 中与 zonearr 中的区域 3 重叠的值的最大值和索引:

import numpy as np
valuearr = np.array([[10,11,12,13],
[21,22,23,24],
[31,32,33,34],
[41,42,43,44]])

zonearr = np.array([ [0,0,1,1],
[0,0,1,1],
[3,3,0,0],
[3,3,0,0]])

我正在尝试:

valuearr[np.argwhere(zonearr==3)].max()
44

当它应该是 42 时。

为了获取索引,我尝试

ind = np.unravel_index(np.argmax(valuearr[np.argwhere(zonearr==3)], axis=None), valuearr.shape)

这当然不起作用,因为最大值不是 44 并且还会给出错误:

builtins.ValueError: index 19 is out of bounds for array with size 16

最佳答案

您可以使用掩码数组来执行您想要的操作。

与:

import numpy as np
valuearr = np.array([[10,11,12,13],
[21,22,23,24],
[31,32,33,34],
[41,42,43,44]])

zonearr = np.array([ [0,0,1,1],
[0,0,1,1],
[3,3,0,0],
[3,3,0,0]], dtype=np.int)

首先屏蔽掉所有zonearr不等于3的值:

masked = np.ma.masked_array(valuearr, mask = (zonearr!=3))

然后用argmax找到最大值的位置:

idx_1d = np.argmax(masked)

最后,将其转换为二维索引:

idx_2d = np.unravel_index(idx_1d, valuearr.shape)

并打印:

print(idx_2d, valuearr[idx_2d])

给出:

(3, 1) 42

关于python - 如何查找重叠 numpy 数组的索引和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54589490/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com