2016-07-24 27 views
3

如果有一個名爲numbers的數組,如下所示。我該如何轉換這個數組,使得numbers變成realNumbers,如下所示,其中1:10的任何數字都不存在於numbers中,其中填充了nanrealNumbers是我想要的結果,在計算之前不存在,只有numbers存在。這是在Matlab代碼中。Matlab:如何使[1 3 5]變成[1 nan 3 nan 5]

numbers = [1 3 5 6 10]; 
realNumbers = [1 nan 3 nan 5 6 nan nan nan 10]; 
+0

這是從你的例子中隱含的程度,但是,當你說'真實',你的意思是'真正',或者特別是'整數'?因爲你在下面得到的答案是特定於「整數」的。 –

回答

6

的另一種方法,使用非常靈活accumarray功能:

numbers = [1 3 5 6 10]; 
realNumbers = accumarray(numbers(:), numbers(:), [], @(x)x(1), NaN).'; 
4
realNumbers = nan(1,10); 
realNumbers(numbers) = numbers 
+0

如何在不預先分配nan數組的情況下做到這一點?另外,'realNumbers'是我想要的結果,在計算之前並不存在。只有'號碼'存在。 – Senyokbalgul

+1

nan(min(數字),max(數字))。你的矢量總是排序?它是獨一無二的數字嗎?它總是從1開始? – Alamakanambra

+0

矢量'數字'總是以唯一的數字排序,但可以以任何數字開頭(不一定始終以1開頭)。 – Senyokbalgul

3

你已經有當數字整數答案。但是,您的問題特別要求實際數字一般,所以我會給出一個更一般的解決方案。

>> Numbers = [0.5, 2, 3.5] 
Numbers = 
    0.5 2.0 3.5 
>> RealNumbers = [0:0.5:5] 
RealNumbers = 
    0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 
>> Members = ismember (RealNumbers, Numbers) 
Members = 
    0 1 0 0 1 0 0 1 0 0 0 
>> RealNumbers(~Members) = nan 
RealNumbers = 
    NaN 0.5 NaN NaN 2.0 NaN NaN 3.5 NaN NaN NaN 
+0

PS:'ismember'還具有'RealNumbers' /'Numbers'中的順序無關緊要的優點。 –

相關問題