如何将值附加到2D数组?

时间:2010-06-23 14:59:27

标签: .net arrays matlab

我是MATLAB的新手,我无法从文档中了解这一点。

function GotData(sender, args)
    interval = args.DataBlock.TimeIntervalInMicroseconds;
    doubles = args.DataBlock.AsDoubleArray();
    x = 0;
    complexCount = length(double(doubles))/2;
    DATA = zeros(complexCount);
    for index = 1:(complexCount-1)
        realnum = doubles(2 * index);
        imagnum = 1i * doubles(2 * index + 1);
        complex = realnum + imagnum;
        x = x + interval;
        DATA(index) = [x complex];
    end
    disp(DATA)
end

我从.NET程序集中触发的事件中获取了一系列双精度数。我正在拆分数组,以便每个偶数项(在一个基于1的数组中)是一个虚数,每个奇数项都是实数。然后我创建一个复数和它的间隔的两项数组。我想将这个1D数组附加到2D数组。我该怎么做?

目前我收到错误:In an assignment A(I) = B, the number of elements in B and I must be the same.。我该怎么办?

interval为1,但可以进行调整。

2 个答案:

答案 0 :(得分:2)

如果您希望DATA成为二维数组,则需要对其进行初始化并将其编入索引:

% ...(your code)...
DATA = zeros(complexCount-1, 2);   % Initialize DATA to an N-by-2 matrix
% ...(your code)...
    DATA(index, :) = [x complex];  % Add the array to a row of DATA
% ...(your code)...

您可以查看这些MathWorks文档链接,以获取有关MATLAB中creating matricesmatrix indexing的更多信息。

答案 1 :(得分:2)

我写的是与gnovice相同的答案,但他先解雇了。 :)

此外,如果真实数据对应于奇数项目而虚数对应于偶数项目,则应更改分配:

realnum = doubles(2 * index - 1);
imagnum = 1i * doubles(2 * index);

无论如何,我会将代码矢量化以避免for循环:

%# ... code to get doubles and interval variables
n = numel(doubles);
realnum = doubles(1:2:n)';
imagnum = 1i * doubles(2:2:n)';
x = interval.*(1:numel(realnum)).';
DATA = [x realnum + imagnum];