2016-07-24 28 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'中的顺序无关紧要的优点。 –

相关问题