【问题标题】:Removing / Manipulating Data in MATLAB在 MATLAB 中删除/操作数据
【发布时间】:2014-11-03 15:47:31
【问题描述】:

我有一些 EMG 数据的小问题,我必须为我正在处理的出版物进行分析。

我有一列包含 13000 个数据点的数据,例如,

0
0
0
1.2
2.5
3.9
6.8
5.3
2.9
1.5
500
... and so on.

现在我遇到的问题是,在这个数据集中,有很多点,比如数据中突然出现的500以上。这些不是错误的数据,只是相差了 1000 倍。

我的问题是解决这些数据点。我可以使用以下脚本删除它们

A = (filename)
A(A>100)=NaN

不幸的是,我对 Matlab 很陌生,所以我希望有人可以帮助我使用脚本,而不是用 NaN 替换错误的数字,而是将其除以 1000 以生成正确单位的数字。

非常感谢

大卫

【问题讨论】:

  • 为什么不能用 A(A>100) = A(A>100)./1000 替换 NaN 赋值?

标签: matlab replace


【解决方案1】:
A = [0 0 0 1.2 2.5 3.9 6.8 5.3 2.9 1.5 500];

我们找到A>100 所在的所有索引

(A(A>100))

我们将这些索引处的值除以 1000,逐元素

A(A>100)./1000

然后将它们分配回去。

A(A>100) = A(A>100)./1000; 

A'
ans =

   0.00000
   0.00000
   0.00000
   1.20000
   2.50000
   3.90000
   6.80000
   5.30000
   2.90000
   1.50000
   0.50000

【讨论】:

  • 您可能应该解释为什么您所做的工作有效,而不仅仅是发布代码。教人钓鱼。 ;)
  • 虽然我认为你可以比@JoErNanO 展示的更简洁(很多),但我同意最好添加至少 1 或 2 行来描述你的解决方案。
  • @DennisJaheruddin 记得 OP 说他对 Matlab非常是新手。因此(尽管过于冗长)冗长。 ;)
【解决方案2】:

了解逻辑索引

你用这个命令做什么

A = (filename)
A(A > 100) = NaN

被称为logical indexing。您基本上是在构建一个大小为numel(A) 的临时逻辑向量(布尔值、0 和1),将每个元素> 100 设置为1,并将所有其他元素设置为0。然后使用这个临时逻辑数组来索引向量A。当你这样做A(A > 100) 时会发生什么,你只选择A 中的项目,这些项目对应于逻辑向量中设置为1 的项目。为了完整起见,给定

>> A = [0 0 0 1.2 101 3.9 6.8 500];
>> indexes = A > 100
  indexes = [0 0 0 0 1 0 0 1]
>> A(indexes) % This is equal to your A(A > 100)
  ans = [101, 500]

缩小你的价值观

了解了这一点后,接下来要做的是将NaN 分配给选定的值:A(A > 100) = NaN。除了这样做,您可以按您需要的任何因素缩小它们,1000 在您的情况下:

>> A = [0 0 0 1.2 101 3.9 6.8 500];
>> indexes = A > 100
  indexes = [0 0 0 0 1 0 0 1]
>> A(indexes) % This is equal to your A(A > 100)
  ans = [101, 500]
>> A(indexes) = A(indexes) ./ 1000
  A = [0 0 0 1.2 0.101 3.9 6.8 0.500]

删除值

因为您说您是 Matlab 的新手,所以我将补充一点,将元素分配给 NaN 不会将它们从您的向量中删除。您所做的可能对您有用,因为您正在绘制这些数据,而 Matlab 的 plot() 函数不会绘制值为 NaN 的数据点。

从向量中删除数据的正确方法是将其分配给一个空值[],如下所示:

>> A = [0 0 0 1.2 101 3.9 6.8 500];
>> indexes = A > 100
  indexes = [0 0 0 0 1 0 0 1]
>> A(indexes) % This is equal to your A(A > 100)
  ans = [101, 500]
>> A(indexes) = []
  A = [0 0 0 1.2 3.9 6.8]

【讨论】:

    猜你喜欢
    • 2021-06-10
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    相关资源
    最近更新 更多