1

プログラムが各 2 次元配列を個別に読み取ることができるように、2 次元配列の 1 次元配列を作成する必要があります。

5 列の大きな配列があり、2 番目の列には「マーカー」データが格納されています。マーカー値に応じて、残りの 4 列から対応するデータを取得し、それらを独自の新しい配列に配置する必要があります。

2 つの for ループを実行することを考えていました。1 つはターゲット データを取得して 1 次元配列のセルに書き込み、もう 1 つは最初の配列を 1 行ずつ読み取り、マーカーを探します。

これはかなり単純な問題だと思います。配列の特定の部分を本質的に切り取って貼り付け、それらを新しい部分に書き込む方法を理解するのに苦労しています。

前もって感謝します。

4

2 に答える 2

1

for ループは必要ありません。論理インデックス付きのマーカーを使用してください。たとえば、大きな配列が次の場合A:

B=A(A(:,2)==marker,[1 3:5]) 

2番目の列なしで、マーカーが存在するすべての行を選択します。次に、reshapeor(:)演算子を使用して 1D にすることができます。たとえば、

B=B(:)

または、ワンライナーが必要な場合:

B=reshape(A(A(:,2)==marker,[1 3:5]),1,[]); 
于 2013-06-24T03:19:45.463 に答える
0

潜在的な将来のユーザーに最終的に思いついたソリューションを示すために、自分の質問に答えているだけです。

%=======SPECIFY CSV INPUT FILE HERE========
MARKER_DATA=csvread('ESphnB2.csv');                        % load data from csv file
%===================================

A=MARKER_DATA(:,2);                                         % create 1D array for markers
A=A';                                                       % make column into row

for i=1:length(A)                                           % for every marker
    if A(i) ~= 231                                          % if it is not 231 then
        A(i)=0;                                             % set value to zero
    end
end

edgeArray = diff([0; (A(:) ~= 0); 0]);                      % set non-zero values to 1
ind = [find(edgeArray > 0) find(edgeArray < 0)-1];          % find indices of 1 and save to array with beginning and end

t=1;                                                        % initialize counter for trials
for j=1:size(ind,1)                                         % for every marked index
    B{t}=MARKER_DATA(ind(j,1):ind(j,2),[3:6]);              % create an array with the rows from the data according to indicies
    t=t+1;                                                  % create a new trial
end

gazeVectors=B';                                             % reorient and rename array of trials for saccade analysis

%======SPECIFY MAT OUTPUT FILE HERE===
save('Trial_Data_2.mat','gazeVectors');                       % save array to mat file
%=====================================
于 2013-07-31T01:29:58.880 に答える