gpt4 book ai didi

python - 创建非 nan 矩阵交叉点的掩码

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:57 25 4
gpt4 key购买 nike

我有两个(或更多)numpy 数组,我需要在其中对所有匹配单元格位置都具有非空值的每个 单元格执行计算。

import numpy

arr_a = numpy.zeros(shape=(5,6))
arr_a.fill(numpy.nan)
arr_b = numpy.zeros(shape=(5,6))
arr_b.fill(numpy.nan)

arr_a[1,1] = 12.9
arr_b[1,1] = 99.2
arr_b[1,2] = 99.2

示例:

arr_a:
array([[ nan, nan, nan, nan, nan, nan],
[ nan, 12.9, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan, nan]])

arr_b:
array([[ nan, nan, nan, nan, nan, nan],
[ nan, 99.2, 99.2, nan, nan, nan],
[ nan, nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan, nan]])

因此对于上面的示例,我希望只有 1 个单元格 (1,1) 匹配。

基本上,我想做这样的事情:

results = defaultdict(list)
mask = numpy.logical_and(arr_a, arr_b)
for arr in (a, b):
# filter out non-overlapping values
filtered_arr = arr.apply(mask)
for cell in numpy.nditer(filtered_arr[filtered_arr != numpy.nan]):
result = big_calc(filtered_arr[cell])
results[cell].append(result)

仍然不太了解 numpy

我尝试使用 numpy.logical_and(arr_a, arr_b) 但它似乎只返回所有 True

有没有一种干净的方法来做到这一点?

最佳答案

测试 Not Not-A-Number(非 NAN):

from numpy import isnan
result = ~isnan(arr_a) * ~isnan(arr_b)

或者,如果您想同时排除 NAN 和无穷大,则运行:

from numpy import isfinite
isfinite(arr_a) * isfinite(arr_b)

在你的测试数组上,以上两个都返回:

array([[False, False, False, False, False, False],
[False, True, False, False, False, False],
[False, False, False, False, False, False],
[False, False, False, False, False, False],
[False, False, False, False, False, False]], dtype=bool)

仅在 (1, 1) 位置为真。

关于python - 创建非 nan 矩阵交叉点的掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20605354/

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