Python:2维(平面/数组/矩阵)缺省值插值
学习自:python插值填补缺省值_插值缺失值2d python_weixin_39592315的博客-CSDN博客
问题
假设我们有一个2D数组(或者矩阵),其中有一些缺省值NaN,就像下边这样:
1 2 3 NaN 5
2 3 4 NaN 6
3 4 NaN NaN 7
4 5 NaN NaN 5
5 6 7 8 9
我们怎么将这些NaN填充为一些合理的值呢?
解决方案
我们可以用scipy.interpolate.griddata进行插值,这里先把完整代码放上来:
#二维缺省值插值
import numpy as np
from scipy import interpolate
array = np.random.random_integers(0,10,(10,10)).astype(float) #①
array[array>7] = np.nan array = np.ma.masked_invalid(array)#②
x = np.arange(0, array.shape[1])#③
y = np.arange(0, array.shape[0])
xx,yy=np.meshgrid(x,y) #④
x1 = xx[~array.mask]#⑤
y1 = yy[~array.mask]
newarr = array[~array.mask].data
GD1 = interpolate.griddata((x1, y1), newarr.ravel(),(xx, yy),method='cubic')#⑥
解释
①生成初始二维数组,在其中生成空值;
array = np.random.randint(0,10,(10,10)).astype(float)
array[array>7]=np.nan
#生成形状为(10,10),值为[0,10)的随机int值的array
#将array中大于7的值设置为空 #结果array([[ 3., 0., 6., nan, nan, nan, 6., 3., 7., 6.],
[ 1., 4., 4., 6., nan, 4., 1., nan, 3., 5.],
[nan, 3., 0., nan, 4., 7., 7., 3., 3., 5.],
[ 0., 7., 0., 2., 6., 6., 1., 4., 7., nan],
[ 0., nan, nan, nan, 4., nan, 6., 0., 2., nan],
[ 2., 5., 2., nan, 6., nan, 1., 2., 4., 4.],
[ 4., 4., 0., 6., 5., 5., 3., 7., 7., 2.],
[ 1., 6., 0., 7., 5., 4., 3., 1., 7., 0.],
[ 2., 4., 4., nan, nan, 6., 3., 1., 5., 2.],
[ 3., 4., 0., 3., 3., 2., 4., 4., 2., nan]])
②生成array的Masked Array;
关于Masked Array这一点可以看Python:numpy.ma模块 - ShineLe - 博客园
array=np.ma.masked_invalid(array)
③得到array的横纵坐标序列x,y;
x=np.arange(0,array.shape[1])
y=np.arange(0,array.shape[1])
④由横纵坐标序列构造2维网格;
XX,YY=np.meshgrid(x,y)
⑤提取原array中有效值的横纵坐标及值;
x1=XX[~array.mask]
y1=YY[~array.mask]
newarr=array[~array.mask].data #提取Masked array中的data
这里的x1、y1、newarr都是一维的,每个元素都是一一对应的,即x1[i]、y1[i]、newarr[i]对应了第i+1个有效值的横纵坐标及值。
⑥插值,二维插值
GD1 = interpolate.griddata((x1, y1), newarr.ravel(),(xx, yy),method='cubic')
关于inerpolate.griddata,可以看Python:Scipy.interpolate.griddata - ShineLe - 博客园
Python:2维(平面/数组/矩阵)缺省值插值的更多相关文章
- MATLAB 的unique函数——数组矩阵的唯一值
MATLAB 的unique函数——求数组矩阵的唯一值 相关MathWork文档见此:unique数组中的唯一值 1.C = unique(A) 返回与 A 中相同的数据,但是不包含重复项.C 已按照 ...
- python中二维数组的建立,输入和输出
''' for循环: for i in range(x,y,dir): pass 首先这个区间是左闭右开 其次dir在省略的情况下默认为1,就是每次加一,也可以指定 python的数组: python ...
- python学习1---列表、矩阵、数组
1.列表与数组区别 numpy数组的所有元素类型是相同的,而列表的元素类型是任意的. 2.numpy数组与矩阵区别 矩阵必须是二维的,数组可以是多维的,matrix是array的一个分支. matri ...
- python 二维数组读入
study from : https://www.cnblogs.com/reaptomorrow-flydream/p/9613847.html python 二维数组键盘输入 1 m = int( ...
- python用法笔记(数组(list、touple、dict)、字符串)
1.产生n个全为1的数组a=[1]*n2.字符数字转化int('12')float('12.5')str(123.45)ASCII码转为相应的字符:chr(97)字符转化为相应的ASCII码:ord( ...
- Python运维开发基础02-语法基础【转】
上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...
- python数据分析 Numpy基础 数组和矢量计算
NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...
- Python运维开发基础10-函数基础【转】
一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...
- Python运维开发基础03-语法基础 【转】
上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...
随机推荐
- collate utf8_bin是什么意思
创建数据库时 collate utf_bin是 以二进制值比较,也就是区分大小写,collate是核对的意思 uft-8_general_ci 一般比较,不区分大小写
- 单例模式的各种实现方式(Java)
单例模式的基础实现方式 手写普通的单例模式要点有三个: 将构造函数私有化 利用静态变量来保存全局唯一的单例对象 使用静态方法 getInstance() 获取单例对象 懒汉模式 懒汉模式指的是单例对象 ...
- linux正则表达式(全面解析)
目录 一:linux正则表达式介绍 二:普通正则表达式 三:扩展正则 一:linux正则表达式介绍 1.正则表达式的分类(grep) 1.普通正则表达式 2.扩展正则表达式 二:普通正则表达式 ^ : ...
- 集合remove()方法相关问题
学习集合的过程中,了解到一个有关于remove()方法的有关特性,特此记录 首先remove方法的格式: collection.remove(Object o); 这是指对集合collection内的 ...
- scanf用法及scanf中有\n的问题
scanf()函数的原理 想象输入设备(键盘)连接着一个叫"缓冲"的东西,把缓冲认为是一个字符数组. 当你的程序执行到scanf时,会从你的缓冲区读东西,如果缓冲区是空的,就阻塞住 ...
- Swift字符串的介绍
字符串的介绍 字符串在任何的开发中使用都是非常频繁的 OC和Swift中字符串的区别 在OC中字符串类型时NSString,在Swift中字符串类型是String OC中字符串@"" ...
- 36、python并发编程之多线程(操作篇)
目录: 一 threading模块介绍 二 开启线程的两种方式 三 在一个进程下开启多个线程与在一个进程下开启多个子进程的区别 四 练习 五 线程相关的其他方法 六 守护线程 七 Python GIL ...
- Solution -「LOCAL」充电
\(\mathcal{Description}\) 给定 \(n,m,p\),求序列 \(\{a_n\}\) 的数量,满足 \((\forall i\in[1,n])(a_i\in[1,m])\l ...
- [LeetCode]35.搜索插入位置(Java)
原题地址: search-insert-position 题目描述: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 请必须使 ...
- Shell 函数带中横线问题排查
Shell 中编写的函数,如果函数名中带了中横线,在使用 /bin/sh 执行时会报错. ➜ subprocess git:(master) ✗ cat kubectl.sh _kubectl_api ...