Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在NaN数组中插值numpy值

在NaN数组中插值numpy值
EN

Stack Overflow用户
提问于 2011-06-29 09:58:44
回答 13查看 59.6K关注 0票数 69

有没有一种快速的方法可以用(比方说)线性插值的值替换NaN数组中的所有numpy值?

例如,

代码语言:javascript
运行
AI代码解释
复制
[1 1 1 nan nan 2 2 nan 0]

将被转换为

代码语言:javascript
运行
AI代码解释
复制
[1 1 1 1.3 1.6 2 2  1  0]
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2011-06-29 12:34:30

让我们首先定义一个简单的助手函数,以便更直接地处理NaNs的索引和逻辑索引

代码语言:javascript
运行
AI代码解释
复制
import numpy as np

def nan_helper(y):
    """Helper to handle indices and logical indices of NaNs.

    Input:
        - y, 1d numpy array with possible NaNs
    Output:
        - nans, logical indices of NaNs
        - index, a function, with signature indices= index(logical_indices),
          to convert logical indices of NaNs to 'equivalent' indices
    Example:
        >>> # linear interpolation of NaNs
        >>> nans, x= nan_helper(y)
        >>> y[nans]= np.interp(x(nans), x(~nans), y[~nans])
    """

    return np.isnan(y), lambda z: z.nonzero()[0]

现在可以像这样使用nan_helper(.)

代码语言:javascript
运行
AI代码解释
复制
>>> y= array([1, 1, 1, NaN, NaN, 2, 2, NaN, 0])
>>>
>>> nans, x= nan_helper(y)
>>> y[nans]= np.interp(x(nans), x(~nans), y[~nans])
>>>
>>> print y.round(2)
[ 1.    1.    1.    1.33  1.67  2.    2.    1.    0.  ]

-

尽管首先指定一个单独的函数来做这样的事情可能看起来有点夸张:

代码语言:javascript
运行
AI代码解释
复制
>>> nans, x= np.isnan(y), lambda z: z.nonzero()[0]

它最终会带来红利。

因此,每当您使用与NaN相关的数据时,只需将所需的所有(新的与NaN相关的)功能封装在某个特定的帮助器函数下。您的代码库将更加连贯和可读性更好,因为它遵循易于理解的习惯用法。

实际上,插值是一个很好的上下文来查看NaN处理是如何完成的,但类似的技术也可以在各种其他上下文中使用。

票数 109
EN

Stack Overflow用户

发布于 2011-06-29 10:19:57

我想出了这个代码:

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
nan = np.nan

A = np.array([1, nan, nan, 2, 2, nan, 0])

ok = -np.isnan(A)
xp = ok.ravel().nonzero()[0]
fp = A[-np.isnan(A)]
x  = np.isnan(A).ravel().nonzero()[0]

A[np.isnan(A)] = np.interp(x, xp, fp)

print A

它打印出来

代码语言:javascript
运行
AI代码解释
复制
 [ 1.          1.33333333  1.66666667  2.          2.          1.          0.        ]
票数 27
EN

Stack Overflow用户

发布于 2012-03-22 02:11:29

只需使用numpy逻辑and where语句来应用一维插值。

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
from scipy import interpolate

def fill_nan(A):
    '''
    interpolate to fill nan values
    '''
    inds = np.arange(A.shape[0])
    good = np.where(np.isfinite(A))
    f = interpolate.interp1d(inds[good], A[good],bounds_error=False)
    B = np.where(np.isfinite(A),A,f(inds))
    return B
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6518811

复制
相关文章
Java中对map按key或val排序
Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式:
sunonzj
2022/06/21
1.6K0
int a; int* a; int** a; int (*a)[]; int (*a)(int)
a) int a;表示一个内存空间,这个空间用来存放一个整数(int); b) int* a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间,即a)中提到的空间; c) int** a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放指针的空间,并且指向的这个空间中的指针,指向一个整数。也简单的说,指向了一个b)中提到的空间; d) int (*a)[4];表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个长度为4、类型为int的数组;和int** a的区别在于,++、+=1之后的结果不一样,其他用法基本相同。 以上四种类型见上图表示。 e) int (*a)(int);表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个函数,这个函数有一个类型为int的参数,并且函数的返回类型也是int。
Twcat_tree
2022/11/30
2.3K0
int a; int* a; int** a; int (*a)[]; int (*a)(int)
lombok的val
今天遇到一个情况,我们知道把java代码粘贴到kt文件里,idea会自动转换java为kt
阿超
2023/02/22
9630
lombok的val
listnode.val java(string indexof方法)
有一列 1.给出 Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) 要求 Output: 7 -> 0 -> 8
全栈程序员站长
2022/08/01
6450
Train / Val / Test划分
合理的Train/Test集划分会有效地减少under-fitting和over-fitting现象
mathor
2020/01/15
2.2K0
VBA专题:Val函数
Val函数返回作为参数传递的字符串中的前导数字,它在无法识别为数字部分的第一个字符处停止读取字符串,但它不会在空格处停止。
fanjy
2022/11/16
1.5K0
jquery的html,text,val
.html()用为读取和修改元素的HTML标签 .text()用来读取或修改元素的纯文本内容 .val()用来读取或修改表单元素的value值。 这三个方法功能上的对比 .html(),.text(),.val()三种方法都是用来读取选定元素的内容;只不过.html()是用来读取元素的HTML内容(包括其Html标签),.text()用来读取元素的纯文本内容,包括其后代元素,.val()是用来读取表单元素的"value"值。其中.和.text()方法不能使用在表单元素上,而.val()只能使用在表单元素上;
marsggbo
2018/01/23
2K0
jquery的html,text,val
    1.html()用为读取和修改元素的HTML标签     2.text()用来读取或修改元素的纯文本内容     3.val()用来读取或修改表单元素的value值。
ydymz
2018/09/10
1.6K0
int(*p)[4] int*p[4]
1、int(*p)[4];------p为指向含4个元素的一维整形数组的指针变量(是指针) #include <stdio.h> #include <stdlib.h> int main() { int a[4]={1,2,3,4}; int (*p)[4]; p=&a; printf("%d\n",(*p)[3]); printf("%d\n",*p); return 0; } 2、int *p[4];-------定义指针数组p,它由4个指向整型数据的
谙忆
2021/01/19
2K0
java中string转换为int(int char)
// String change int public static void main(String[] args) { String str = “123”; int n; // first method // n = Integer.parseInt(str); n = 0; n = Integer.parseInt(str); System.out.println(“Integer.parseInt(str):”+ n); System.out.println(“\n”); //second method //n = Integer.valueOf(str).intValue();
全栈程序员站长
2022/07/28
1.9K0
java中string转换为int(int char)
JAVA将string转化为int(int怎么转string)
1). int i = Integer.parseInt([String]); 或
全栈程序员站长
2022/07/28
3K0
C# int int16 Int32 Int64的介绍[通俗易懂]
今天看到别人的代码中用到Int32,UInt32相关,想到自己平时用的都是int类型整数,就心生好奇的翻了一下资料:
全栈程序员站长
2022/09/21
3.6K0
.net Int16 、(int Int32)、 Int64 的区别
摘要: 关于什么是16位整数,32位整数,64位整数,请看这里:http://www.cnblogs.com/EasonJim/p/4837061.html Int16 值类型表示值介于 -32768 到 +32767 之间的有符号整数。
拓荒者
2019/03/14
2.7K0
int是什么_int a[4][4]
Int16 意思是16位整数(16bit integer),相当于short 占2个字节 -32768 ~ 32767
全栈程序员站长
2022/09/21
1.4K0
聊聊kotlin的val跟var
val:英文读value,代表是immutable, 只读的意思 比如下面这个kotlin代码
韦东锏
2021/09/29
1.2K0
聊聊kotlin的val跟var
2022-05-26:void add(int L, int R, int C)代表在arr[L...R]上每个数加C, int get(int L, int
2022-05-26:void add(int L, int R, int C)代表在arrL...R上每个数加C,
福大大架构师每日一题
2022/05/26
1.5K0
2022-05-26:void add(int L, int R, int C)代表在arr[L...R]上每个数加C, int get(int L, int
#define a int[10]与 typedef int a[10]用法
// #define a int[10] #include <stdio.h> #include <stdlib.h> #define a int[10] int main() { int *p=(int *)malloc(sizeof(a)); p[0]=1; printf("%d\n",p[0]); return 0; } // typedef int a[10]; #include <stdio.h> typedef int a[10]; int m
Daotin
2018/08/31
1.6K0
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)[转]include <stdio.h>int func(int a, int b, int c, int d, int e,
声明:本文转自Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码),此文干货很多。
用户2930595
2018/08/23
4.2K0
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)[转]include <stdio.h>int func(int a, int b, int c, int d, int e,
JAVA 枚举 String-int
/** * @author 姜兴琪 */ package cn.bycs.online.dealer.vo; /** * @author jiangxingqi * 车辆状态枚举 */ public enum NewCarStatusEnum { DRAFT("草稿",1), SUBMIT_RELEASE("提交发布",2), PUBLISH_SUCCESS("发布成功",3), AUDIT_DENY("审核不通过",4); private St
week
2018/08/27
3440
点击加载更多

相似问题

基本Regex需要帮助

15

需要Python Regex帮助(基本)

42

需要C语言的基本帮助

26

需要帮助来完成连接

10

需要帮助理解基本递归问题

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档