2010-06-23 103 views
1

我是MATLAB新手,我無法從文檔中理解這一點。如何將值附加到2D數組?

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,但可以調整。

+1

間隔和雙打的大小是多少。間隔的價值是什麼? 嘗試是這樣的: >> d = [1 2 3 4 5 6] d = >> C = d(1:2:結束)+ I * d( 2:2:結束) c = 1.0000 + 2.0000i 3.0000 + 4.0000i 5.0000 + 6.0000i – 2010-06-23 15:11:33

+0

感謝您的提示,@hash blue – 2010-06-23 15:29:04

回答

2

如果你想DATA是一個2-d數組,你需要對它進行初始化和索引它是這樣:

% ...(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公司有關進一步信息creating matricesmatrix indexing在文檔鏈接MATLAB。

+0

這正是我所需要的。謝謝,@gnovice。 – 2010-06-23 15:30:54

2

我和gnovice一樣寫了同樣的答案,但是他先被解僱了。 :)

此外,如果真實數據對應於奇數項和想象,甚至物品,你應該改變分配:

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

無論如何,我會向量化的代碼以避免循環:

%# ... 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]; 
+0

關於矢量化的好處,但我認爲'時間間隔'是一個單一的值,而不是一個數組。 – gnovice 2010-06-23 15:39:43

+0

@gnovice,你說得對,我剛剛更新。 – yuk 2010-06-23 15:40:48

+0

其實,'x = interval。*(1:numel(realnum))。';'應該就夠了。 ;) – gnovice 2010-06-23 15:46:10