迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Matplotlib Pyplot 中显示网格

发布时间:2024/02/04 浏览次数:142 分类:Python

本文演示了如何在 Python Matplotlib 中在一个图上画一个网格。使用 grid()函数来绘制网格,并解释了如何改变网格颜色和线条类型。

如何在 Matplotlib 中画一条任意线

发布时间:2024/02/04 浏览次数:166 分类:Python

本教程讲解了我们如何在 Matplotlib 中使用 matplotlib.pyplot.plot()、matplotlib.pyplot.vlines()、matplotlib.pyplot.hlines()方法和 matplotlib.collection.LineCollection 绘制任意线条。

Matplotlib 中的叠加条形图

发布时间:2024/02/04 浏览次数:182 分类:Python

本教程展示了如何使用 plt.bar()方法将某些数据集的条形图堆叠在另一个数据集上。我们在 Matplotlib 中使用 matplotlib.pyplot.bar()方法生成条形图。

设置 Matplotlib 网格间隔

发布时间:2024/02/04 浏览次数:250 分类:Python

本教程将介绍我们如何在 Matplotlib 绘图中设置网格间距,并对主要网格和次要网格应用不同的样式。

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便