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

news2024/11/19 7:26:31

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 = -23750
    min_neighbors = 3
    fill_empty_with_mean(array, empty_value,min_neighbors)
    # 输出填充后的数组
    print(array)

在这里插入图片描述

2 实现二,填充内部

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

import numpy as np

def 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] if
                             arr[i + x, j + y] != empty_value]
                # 如果周围非空元素的个数大于等于min_neighbors,计算均值并填充
                if len(neighbors) >= min_neighbors:
                    arr[i, j] = np.mean(neighbors)
    return arr

if __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 = -23750
    min_neighbors = 5
    arr = fill_empty_with_mean(array, empty_value, min_neighbors)
    # 输出填充后的数组
    print(arr)

在这里插入图片描述

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

代码实现

import numpy as np


def 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 arr

if __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 = -23750
    min_neighbors = 3
    arr = fill_edge_empty_with_mean(array, empty_value, min_neighbors)
    # 输出填充后的数组
    print(arr)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1105754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

oracle 错题汇总

在Oracle数据库中&#xff0c;如果你在GROUP BY子句中指定了列&#xff0c;那么SELECT子句中除了聚合函数外的每个列都必须在GROUP BY子句中列出。 1.查询出每个部门的编号、名称、位置、部门人数、平均工资。 SELECT d.deptno AS "部门编号", d.dname AS &…

Jmeter(四):请求默认值元件应用,正则表达式提取器元件讲解

Jmeter请求默认值元件应用 HTTP请求默认值 在公司内部进行测试的时候&#xff0c;一般测试环境访问的接口地址&#xff08;服务器名称 或IP&#xff09;、端口、协议一般都是不变的&#xff0c;但http请求取样器每个请求都要求写一遍 这些信息&#xff0c;在实际HTTP请求取样…

数据驱动娱乐的未来:揭秘爱奇艺如何利用Apache Spark实现个性化推荐和内容分析

Apache Spark 在爱奇艺的现状与应用 Apache Spark 是爱奇艺大数据平台的核心组件&#xff0c;被广泛应用于数据处理、数据同步和数据查询分析等关键场景。在数据处理方面&#xff0c;爱奇艺通过数据开发平台支持开发者提交 Spark Jar 包任务或 Spark SQL 任务&#xff0c;进行…

预防电压波动带来的灾难:瞬态电压抑制器的作用和原理 | 百能云芯

在当今数字化时代&#xff0c;电子设备的应用已经无处不在&#xff0c;从个人电脑到智能手机&#xff0c;再到工业自动化系统和通信设备&#xff0c;这些设备的正常运行对于我们的生活和工作至关重要。然而&#xff0c;电子设备常常会受到来自电力系统的电压波动和瞬态电压的威…

Win+L不能锁屏

1、运行WINR&#xff0c;输入REGEDIT&#xff0c;运行注册表&#xff1a; 2、CTRLF&#xff0c;输入查找DisableLockWorkstation 3、双击这个&#xff0c;点十进制&#xff0c;输入0点确认即可。

复制粘贴(一):copy paste 事件

页面内容如下&#xff1a; <body><div id"container1"><p>阳光<input type"button" value"按钮" /><span>hello</span></p></div> </body>选择所有内容&#xff1a; user-select 按钮左…

低代码如何赋能实体经济走向数实融合

数字工厂、智慧园区、智慧社区、数字乡村、智慧校园、数字化管理平台……当前&#xff0c;各行各业正在全面拥抱数字化。“数实融合”的浪潮持续高涨&#xff0c;企业数字化转型的呼声也不断走高。然而&#xff0c;当前实体经济和数字经济融合不全&#xff0c;数字技术未能深度…

你可以永远相信铁死亡,4+机器学习+分型+实验的干湿结合机制

今天给同学们分享一篇铁死亡机器学习分型实验的生信文章“Identification of Ferroptosis-Related Biomarkers for Diagnosis and Molecular Classification of Staphylococcus aureus-Induced Osteomyelitis”&#xff0c;这篇文章于2023年4月26日发表在J Inflamm Res期刊上&a…

webpack快速入门

目录 1.概述 1.1.什么是webpack 1.2.loader 2.项目搭建 3.打包js&#xff1a; 4.打包CSS 5.打包图片 6.插件 1.概述 1.1.什么是webpack webpack是一个打包工具&#xff0c;其作用是对整个项目中的js、image、css进行打包。 传统的前端项目引用的第三方js或者css的时候…

DTI综述(更新中)

Deep Learning for drug repurposing&#xff1a;methods&#xff0c;datasets&#xff0c;and applications 综述读完&#xff0c;觉得少了点东西&#xff0c;自己写个DTI综述 Databases(包括但不限于文章中的) DATABASEDESCRIBEBindingDB有详细的drug信息和对应的target&a…

美国绿氢项目开发商NovoHydrogen完成2000万美元融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国科罗拉多州戈尔登的绿氢项目开发商NovoHydrogen今日宣布已完成2000万美元融资。 本轮融资由现代能源公司领投。 该公司打算利用这笔资金进一步扩大其团队&#xff0c;并将其绿氢项目的…

页面路由跳转 - 文件 File对象数据传递

目录 需求主要问题点问题点2.1 演示问题点2.2 演示及解决页面B 处理1 - 有问题页面B 处理2 - 没有问题 - 最终解决办法 【补充】 file 对象转为 base64 文件&#xff08;即 将 file 对象转为 DataURL&#xff09; 需求 页面A填写完信息&#xff08;填写的信息中有上传的文件&am…

操作系统 —— 处理机调度与死锁

&#xff08;一&#xff09;简答题 1.高级调度与低级调度的主要任务是什么&#xff1f;为什么要引人中级调度&#xff1f; 参考答案&#xff1a; ①高级调度的对象是作业。它的主要任务是根据某种算法&#xff0c;决定 将外存上处于后备队列中的哪几个作业调入内存&#xff0c…

SW中的面部曲线命令

今天学习老王的画图教程中看到在使用面部曲线命令&#xff0c;找了变天没有&#xff0c;于是开始四处查找模式&#xff0c;终于在一个视频中看到了&#xff0c;原来不是在曲面命令中&#xff0c;而是在草图命令中&#xff0c;老王为了迷惑学员&#xff0c;把这个面部曲线命令放…

vite+vue3.0 使用tailwindcss

参考资料&#xff1a; 安装 - TailwindCSS中文文档 | TailwindCSS中文网 npm install -D tailwindcss npm install postcss npm install autoprefixer npx tailwindcss init -p 生成/src/tailwind.config.js和/src/postcss.config.js配置文件 在/src/tailwind.config.js配置文件…

【广州华锐互动】VR建筑安全培训体验为建筑行业人才培养提供有力支持

随着建筑行业的快速发展&#xff0c;建筑施工安全问题日益受到广泛关注。然而&#xff0c;传统的安全培训方式往往缺乏实践性和真实性&#xff0c;难以让员工真正掌握安全操作技能。近年来&#xff0c;虚拟现实(VR)技术的广泛应用为建筑施工安全培训提供了新的机遇。 虚拟现实技…

私有化部署助力企业信息安全,WorkPlus助您完美替代企微、钉钉、飞书!

在企业通讯领域&#xff0c;企业微信、钉钉和飞书等平台早已成为众多企业的首选。然而&#xff0c;对于一些企业来说&#xff0c;依赖公有云平台带来的数据安全和隐私问题仍然是一个隐患。因此&#xff0c;越来越多的企业开始关注私有化部署的解决方案。而在这个领域&#xff0…

JAVA转GO

GO 环境配置 go环境 下载go并安装(win下),环境变量他自己要配置上 https://dl.google.com/go/go1.21.3.windows-amd64.msi 验证是否安装成功: //打开cmd go versionVSCODE环境 下载VSCODE…略 配置VSCODE的环境 下载插件 go开发工具包 打开cmd,或者VSCODE自带的终端,…

OFDM基本原理

一、OFDM简述 OFDM 的全称是 Orthogonal Frequency Divisition Multiplexing&#xff0c;是一种多载波调制技术&#xff0c;其能有效对抗频率选择性衰落&#xff0c;克服信号符号间干扰。OFDM的技术的核心思想是将宽频率载波划分成多个带宽较小的正交子载波&#xff0c;并使用这…

2020年亚太杯APMCM数学建模大赛B题美国总统的经济影响分析求解全过程文档及程序

2020年亚太杯APMCM数学建模大赛 B题 美国总统的经济影响分析 原题再现&#xff1a; 美国总统选举每四年举行一次。 2020年是美国总统大选年&#xff0c;共和党候选人唐纳德特朗普和民主党对手乔拜登竞选总统。 甲乙双方候选人在金融贸易&#xff0c;经济金融治理&#xff0c;…