Matlab:如何使 [1 3 5] 变为 [1 nan 3 nan 5]

Matlab: how to make [1 3 5] become [1 nan 3 nan 5]

如果有一个名为numbers的数组如下所示。如何转换此数组,使 numbers 变为 realNumbers,如下所示,其中 numbers 中不存在的 1:10 中的任何数字都填充有 nan . realNumbers 是我想要的结果,在计算之前不存在,只有 numbers 存在。这是在 Matlab 代码中。

numbers = [1 3 5 6 10];
realNumbers = [1 nan 3 nan 5 6 nan nan nan 10];
realNumbers = nan(1,10);
realNumbers(numbers) = numbers

另一种方法,使用非常通用的 accumarray 函数:

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

当数字为整数时,您已经有了答案。但是,您的问题一般特别要求 真实 数字,因此我将提供更通用的解决方案。

>> 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