了解逻辑索引
你用这个命令
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]
为什么不能用'A(A> 100)= A取代的NaN分配(A> 100)./ 1000'? – kkuilla 2014-11-03 15:56:21