IDL设置数组的中的nodata值

4 篇文章 0 订阅


情形一:
arr
      0.00000000       1.0000000       2.0000000
       3.0000000             NaN       5.0000000
       6.0000000       7.0000000       8.0000000
>>arr[where(arr ne !values.F_NAN)]
      0.00000000       1.0000000       2.0000000       3.0000000             NaN       5.0000000       6.0000000       7.0000000
       8.0000000
发现虽然指定了不等于nan的,但仍然把NaN统计进来了,所以再求mean,max时仍然为NaN
即mean(arr[where(arr ne !values.F_NAN)])= NaN


情形二:
令指定元素为无穷时:
arr
      0.00000000       1.0000000       2.0000000
       3.0000000             Inf       5.0000000
       6.0000000       7.0000000       8.0000000
mean(arr[where(arr ne !values.F_INFINITY)])  等于4.000,就是说排除了Inf。
打印出来发现只有8个元素,排除了Inf。
arr[where(arr ne !values.F_INFINITY)]
      0.00000000       1.0000000       2.0000000       3.0000000       5.0000000       6.0000000       7.0000000       8.0000000




综上所述,如果想排除指定区域的值是可以使用指定其值为inf即可。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个问题比较复杂,需要详细说明输入和输出的数据结构以及具体的处理逻辑。以下是一种可能的解决方案: 假设输入的是一个二维数组 A,其每个元素是一个整数。我们需要将相同的区域进行分类,并取每个区域的最大作为该区域的代表。输出是一个二维数组 B,其每个元素也是一个整数,表示该位置所属的区域的代表。 首先,我们需要定义一个函数来判断两个元素是否属于同一个区域。一个简单的方法是使用深度优先搜索(DFS)来遍历所有与给定元素相邻的元素,并将它们标记为同一个区域。具体的实现可以参考以下代码: ```python def dfs(A, i, j, visited, region): if i < 0 or i >= len(A) or j < 0 or j >= len(A[0]): return if visited[i][j] or A[i][j] != A[region[0]][region[1]]: return visited[i][j] = True region.append((i, j)) dfs(A, i-1, j, visited, region) dfs(A, i+1, j, visited, region) dfs(A, i, j-1, visited, region) dfs(A, i, j+1, visited, region) def find_regions(A): visited = [[False for _ in range(len(A[0]))] for _ in range(len(A))] regions = [] for i in range(len(A)): for j in range(len(A[0])): if not visited[i][j]: region = [] dfs(A, i, j, visited, region) regions.append(region) return regions ``` 这个函数接受一个二维数组 A 和返回一个列表 regions,其每个元素是一个列表,表示一个区域的所有坐标。我们通过遍历 A 的每个元素来寻找所有的区域,每次找到一个新的区域时,就使用 DFS 来遍历该区域的所有元素,并将它们标记为已经访问过。 接下来,我们可以使用一个字典来将每个区域的代表记录下来。具体的实现可以参考以下代码: ```python def get_max_in_region(A, region): max_val = A[region[0][0]][region[0][1]] for i, j in region: if A[i][j] > max_val: max_val = A[i][j] return max_val def classify_regions(A): regions = find_regions(A) region_dict = {} for region in regions: max_val = get_max_in_region(A, region) for i, j in region: region_dict[(i, j)] = max_val return region_dict ``` 这个函数接受一个二维数组 A 和返回一个字典 region_dict,其每个键对表示一个坐标和它所属的区域的代表。我们通过调用 find_regions 函数来获取所有的区域,然后遍历每个区域,并使用 get_max_in_region 函数来计算该区域的最大。最后,我们将每个坐标和它所属的区域的代表记录到字典。 最后,我们可以根据字典 region_dict 来构建输出的二维数组 B。具体的实现可以参考以下代码: ```python def get_classified_array(A, region_dict): B = [[0 for _ in range(len(A[0]))] for _ in range(len(A))] for i in range(len(A)): for j in range(len(A[0])): B[i][j] = region_dict[(i, j)] return B ``` 这个函数接受一个二维数组 A 和一个字典 region_dict,然后返回一个新的二维数组 B,其每个元素表示该位置所属的区域的代表。我们通过遍历每个元素来获取它所属的区域的代表,并将该记录到输出数组 B 。 综合以上三个函数,我们可以使用以下代码来解决这个问题: ```python def idl_max_in_region(A): region_dict = classify_regions(A) B = get_classified_array(A, region_dict) return B ``` 这个函数接受一个二维数组 A,并返回一个新的二维数组 B,其每个元素表示该位置所属的区域的代表。我们首先调用 classify_regions 函数来获取所有区域的代表,然后调用 get_classified_array 函数来构建输出数组 B。最后,我们将 B 返回作为结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值