当前位置: 首页 > news >正文

Python开发之二维数组空缺值的近邻填充

Python开发之二维数组空缺值的填充

  • 1 实现一,任意位置填充
  • 2 实现二,填充内部
  • 3 实现三,只填充边缘,不包括四个角

前言:主要实现二维数据里面某一个数据的缺失,用缺失的近邻数据进行均值填充,可以应用在遥感图像中空缺值的填充等。


1 实现一,任意位置填充

对二维数据任意位置的空缺值进行近邻填充。
代码实现,其中指定空缺值,指定近邻的数量

import numpy as np# 定义一个函数来填充-23750为空值
def fill_empty_with_mean(arr, empty_value,min_neighbors):# 获取数组的行数和列数rows, cols = arr.shape# 遍历数组for i in range(rows):for j in range(cols):if arr[i, j] == empty_value:# 获取周围非空元素的均值neighbors = []for x in [-1, 0, 1]:for y in [-1, 0, 1]:if 0 <= i + x < rows and 0 <= j + y < cols and arr[i + x, j + y] != empty_value:neighbors.append(arr[i + x, j + y])# 计算均值并填充if len(neighbors) >=min_neighbors:# print(neighbors)# print(np.mean(neighbors))arr[i, j] = np.mean(neighbors)if __name__ == '__main__':# 创建一个包含-23750为空值的示例二维数组array = np.array([[1, -23750, 1, 1, 1],[1, -23750, 1, 1, -23750],[-23750, 2, 9, -1, 1.0],[-1, -1, -23750, 5,  -23750]])# 使用函数填充-23750为空值empty_value = -23750min_neighbors = 3fill_empty_with_mean(array, empty_value,min_neighbors)# 输出填充后的数组print(array)

在这里插入图片描述

2 实现二,填充内部

对二维数据任意位置的空缺值进行近邻填充(去掉边缘)。
代码实现,其中指定空缺值,指定近邻的数量

import numpy as npdef fill_empty_with_mean(arr, empty_value, min_neighbors=5):# 获取数组的行数和列数rows, cols = arr.shape# 遍历数组for i in range(1, rows - 1):  # 从第2行到倒数第2行for j in range(1, cols - 1):  # 从第2列到倒数第2列if arr[i, j] == empty_value:# 获取周围非空元素的个数neighbors = [arr[i + x, j + y] for x in [-1, 0, 1] for y in [-1, 0, 1] ifarr[i + x, j + y] != empty_value]# 如果周围非空元素的个数大于等于min_neighbors,计算均值并填充if len(neighbors) >= min_neighbors:arr[i, j] = np.mean(neighbors)return arrif __name__ == '__main__':# 创建一个包含-23750为空值的示例二维数组array = np.array([[1, -23750, 1, 1, 1],[1, -23750, 1, 1, -23750],[-23750, 1, 7, -1, 1],[-1, -1, -23750, 5, 6]])# 输出填充后的数组# print(array)# 使用函数填充-23750为空值,只有周围至少有5个非空值时才填充empty_value = -23750min_neighbors = 5arr = fill_empty_with_mean(array, empty_value, min_neighbors)# 输出填充后的数组print(arr)

在这里插入图片描述

3 实现三,只填充边缘,不包括四个角

代码实现

import numpy as npdef fill_edge_empty_with_mean(arr, empty_value, min_neighbors=5):# 获取数组的行数和列数rows, cols = arr.shape# 遍历第一行for j in range(1, cols - 1):if arr[0, j] == empty_value:# 获取周围非空元素的个数neighbors = [arr[0 + x, j + y] for x in [0, 1] for y in [-1, 0, 1] if arr[0 + x, j + y] != empty_value]print(neighbors)# 如果周围非空元素的个数大于等于min_neighbors,计算均值并填充if len(neighbors) >= min_neighbors:arr[0, j] = np.mean(neighbors)print(float(np.mean(neighbors)))## 遍历最后一行for j in range(1, cols - 1):if arr[rows - 1, j] == empty_value:# 获取周围非空元素的个数neighbors = [arr[rows - 1 + x, j + y] for x in [-1, 0] for y in [-1, 0, 1] if arr[rows - 1 + x, j + y] != empty_value]print(neighbors)# 如果周围非空元素的个数大于等于min_neighbors,计算均值并填充if len(neighbors) >= min_neighbors:arr[rows - 1, j] = np.mean(neighbors)print(float(np.mean(neighbors)))## 遍历第一列for i in range(1, rows - 1):if arr[i, 0] == empty_value :neighbors = [arr[i + x, 0 + y] for x in [-1, 0, 1] for y in [0, 1] if arr[i + x, 0 + y] != empty_value]print(neighbors)# 如果周围非空元素的个数大于等于min_neighbors,计算均值并填充if len(neighbors) >= min_neighbors:arr[i, 0] = np.mean(neighbors)print(float(np.mean(neighbors)))# 遍历最后一列for i in range(1, rows - 1):if arr[i, cols - 1] == empty_value:# 获取周围非空元素的个数neighbors = [arr[i + x, cols-1 + y] for x in [-1, 0, 1] for y in [-1, 0] if arr[i + x, cols-1 + y] != empty_value]print(neighbors)# 如果周围非空元素的个数大于等于min_neighbors,计算均值并填充if len(neighbors) >= min_neighbors:arr[i, cols - 1] = np.mean(neighbors)print(float(np.mean(neighbors)))return arrif __name__ == '__main__':# 创建一个包含-23750为空值的示例二维数组array = np.array([[1, -23750, 1, 1, 1],[1, -1, 1, 1, -23750],[-23750, 1, 7, -1, 1],[-1, -1, -23750, 5, 6.0]])# 输出填充后的数组# print(array)# 使用函数填充-23750为空值,只有周围至少有5个非空值时才填充empty_value = -23750min_neighbors = 3arr = fill_edge_empty_with_mean(array, empty_value, min_neighbors)# 输出填充后的数组print(arr)

在这里插入图片描述

http://www.lryc.cn/news/199585.html

相关文章:

  • vue使用pdf 导出当前页面,(jspdf, html2canvas )
  • 【oracle删除表 回滚操作】
  • Vue3 + TypeScript
  • 软件测试/测试开发丨南科大计算机系本科生获“火焰杯”软件测试高校就业选拔赛一等奖
  • 访问 github 问题解决方法
  • 供应QCA8075原装芯片
  • 在Maven中配置代理服务器的详细教程
  • QStringListModel
  • Linux下的文件管理
  • RN:报错info Opening flipper://null/React?device=React%20Native
  • 请问嵌入式或迁移学习要学什么?
  • 数据结构-----图(Graph)论必知必会知识
  • 外汇天眼:法国金融市场管理局(AMF)致力于向零售投资者提供有关金融产品费用的信息
  • 【PythonGIS】基于Python批量合并矢量数据
  • 精益求精:使用Ansible集中式自动备份核心数据
  • 大数据高级面试题
  • 如何拦截响应内容并修改响应头
  • 分类预测 | Matlab实现WOA-GRU鲸鱼算法优化门控循环单元的数据多输入分类预测
  • 特定深度节点链表
  • 【css】背景换颜色
  • 什么是美颜sdk?直播实时美颜sdk的工作流程和架构分析
  • 第二证券:跌破3000点,热搜第一!
  • IJCAI2023【基于双曲空间探索的非独立同分布联邦学习】
  • 实现Linux下Word转PDF、Java调用命令方式
  • Java并发-06-AQS(AbstractQueuedSynchronizer)相关
  • 【Python接口自动化】--深入了解HTTP接口基本组成和网页构建原理
  • window mysql5.7.27 启用SSL openssl mysql_ssl_rsa_setup
  • 性能测试-JMeter分布式测试及其详细步骤
  • 学习gin-vue-admin之创建api和swagger
  • 2023-10-17 mysql-innodb-解析write_row的record的一行数据-分析