瞭解邏輯索引
你用這個命令
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