迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > MATLAB >

MATLAB 从向量中移除 NaN

作者:迹忆客 最近更新:2023/04/23 浏览次数:

本教程将讨论使用 MATLAB 的 isnan() 函数从向量中删除 NaN 值。


MATLAB 从向量中删除 NaN 值

NaN 值是在算术运算的情况下生成的未定义值。 要从向量中删除 NaN 值,我们必须找到它们的位置或索引,然后我们可以将 NaN 值设置为 null。

我们可以使用 isnan() 函数,它返回一个由 0 和 1 组成的逻辑数组来查找 NaN 值的位置。 逻辑数组中的 1 代表 NaN 值,数组中的 0 代表其他值。

假设输入向量包含复数值; isnan() 函数在实部和虚部都不包含 NaN 时返回 0,在实部或虚部包含 Nan 时返回 1。 我们可以使用 isnan() 函数的输出为 NaN 值分配一个 null 或空向量。

例如,让我们创建一个包含 NaN 值的向量并使用 isnan() 函数删除它们。 请参阅下面的代码。

clc
clear

v = [1 2 nan 2 nan]
i = isnan(v)
v(i) = []

输出:

v =

     1     2   NaN     2   NaN


i =

  1×5 logical array

   0   0   1   0   1


v =

     1     2     2

在上面的代码中,变量 i 是一个逻辑数组,在 NaN 值的位置包含一个,我们使用这些索引值将 NaN 值设置为等于空向量。 我们可以在上面的输出中看到,NaN 值已从向量 v 中移除。

在上面的代码中,我们将 NaN 值设置为一个空向量,但我们也可以将它们替换为其他值,例如 0。例如,让我们将向量中的 NaN 值替换为零。

请参阅下面的代码。

clc
clear

v = [1 2 nan 2 nan]
i = isnan(v)
v(i) = 0

输出:

v =

     1     2   NaN     2   NaN


i =

  1×5 logical array

   0   0   1   0   1


v =

     1     2     0     2     0

假设我们有两个相互依赖的向量,比如第一个向量的第一个值依赖于第二个向量的第一个值。 向量中有NaN值,我们要移除它们和另一个对应的值,因为这两个向量相互依赖。

我们还希望输出向量具有相同的大小。

我们必须删除第一个向量的 NaN 值和第二个向量的相应值,即使它们不是 NaN 值,然后我们必须对第二个向量做同样的事情。 还有另一种方法,我们可以找到两个向量中存在的 NaN 值的索引,然后我们可以将它们的逻辑或将两个值组合起来,然后我们可以使用组合结果来删除或替换 NaN 值。

例如,让我们创建两个向量并删除它们的 NaN 值和两个向量中存在的对应值。 请参阅下面的代码。

clc
clear

v1 = [1 2 nan 2 nan]
v2 = [NaN 1 0 2 5]
i1 = isnan(v1);
i2 = isnan(v2);
i = i1 | i2
v1(i) = []
v2(i) = []

输出:

v1 =

     1     2   NaN     2   NaN


v2 =

   NaN     1     0     2     5


i =

  1×5 logical array

   1   0   1   0   1


v1 =

     2     2


v2 =

     1     2

在上面的代码中,我们使用了符号 | 用于逻辑或组合两个逻辑数组。 我们可以在上面的输出中看到输出向量没有 NaN 值,并且它们的大小相等。

如果我们只想删除同时存在于两个向量中相同位置的 NaN 值,我们可以使用逻辑 AND 代替逻辑 OR。 例如,让我们创建两个向量,并仅当值出现在同一索引处时才从中删除 NaN 值。

请参阅下面的代码。

clc
clear

v1 = [1 2 nan 2 nan];
v2 = [1 0 nan 5 6];
i1 = isnan(v1);
i2 = isnan(v2);
i = i1 & i2;
v1(i) = []
v2(i) = []

输出:

v1 =

     1     2     2   NaN


v2 =

     1     0     5     6

在上面的输出中,两个向量的第一个 NaN 值出现在相同的位置并在输出中被删除。 第二个 NaN 值没有被移除,因为它对应的值不是 NaN。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 MATLAB 中注释多行

发布时间:2023/04/23 浏览次数:111 分类:MATLAB

可以使用注释块方法或 MATLAB 编辑器在 MATLAB 中注释多行。

MATLAB 最大索引

发布时间:2023/04/23 浏览次数:192 分类:MATLAB

在本教程中,我们将讨论如何使用 MATLAB 中的 max() 函数从数组及其索引中查找最大值。

MATLAB 索引超出矩阵尺寸

发布时间:2023/04/23 浏览次数:103 分类:MATLAB

要解决索引超出矩阵索引的问题,请检查你要获取或替换数据的索引。

MATLAB 检查变量类型

发布时间:2023/04/23 浏览次数:92 分类:MATLAB

在本教程中,我们将讨论如何使用 MATLAB 中的 class() 和 whos 函数检查给定变量的类型。

MATLAB vs Octave

发布时间:2023/04/23 浏览次数:74 分类:MATLAB

我们可以说 Octave 是 MATLAB 的免费版本。

MATLAB MAT 文件

发布时间:2023/04/23 浏览次数:89 分类:MATLAB

可以使用 MAT 文件在 MATLAB 中存储和加载格式化的数据。

MATLAB asv 文件

发布时间:2023/04/23 浏览次数:180 分类:MATLAB

.asv 文件是 MATLAB 生成的自动保存文件,因此在计算机崩溃时你不会丢失数据。

MATLAB 三元运算符

发布时间:2023/04/23 浏览次数:130 分类:MATLAB

MATLAB 中没有三元运算符,因此你必须使用标准格式。

MATLAB & vs &&

发布时间:2023/04/23 浏览次数:134 分类:MATLAB

在 MATLAB 中,&是逻辑与运算符,&&也是表现出短路行为的逻辑运算符。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便