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
如果有一个名为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