我的一些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以产生正确单位的数字。
非常感谢
大卫
答案 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]