在MATLAB中删除/操作数据

时间:2014-11-03 15:47:31

标签: matlab replace

我的一些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以产生正确单位的数字。

非常感谢

大卫

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

了解逻辑索引

您正在使用此命令执行的操作

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

被称为logical indexing。您基本上构建了一个大小为numel(A)的逻辑(布尔值,0&1;和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。您可以根据需要使用任何因素({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]
>> 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]