2014-09-10 1 views
0

: matlab에를 사용하는 단일 입자 추적 프로그램에서matlab에 : 구조에서 데이터를 추출하고 셀 어레이로 이동 내가 matlab에 아주 새로운 오전 다음과 같은 문제에 대한 해결책을 마련 할 수

(uTrack , 정확하게) 나는 추적 결과를 구조체로 얻는다. 이 구조 안에는 모든 입자의 궤도가 다른 구조 안에 저장되어 있습니다. 이러한 구조에서, 트랙은 다음 방식으로 매트릭스 (매트릭스는 두 다른 정보도있다)로 찾을 수있다 :

x coord/y coord/z coord/Amplitude/dx/dy/dz/dA ... 

이 최초 시점에 대한 것이다. 그런 다음 끝까지 두 번째 시간 동안 x 좌표, y 좌표 등으로 다시 시작합니다.

는 추가적인 평가를 위해, I에서만 필요 X 및 Y는 다음과 같은 형태로 각 입자에 대한 셀 어레이 내의 한 요소

[t1 x1 y1; 
t2 x2 y2; 
t3 x3 y3; 
...] 

의 세포 배열 좌표.

따라서, 어떻게 든 x와 y 좌표를 추출하여 전송하고 올바른 길이의 첫 번째 열에 시간 정보를 추가해야합니다.

이미 데이터를 매트릭스로 변환하려고 시도했지만 여기서 문제는 트랙의 길이가 모두 동일하지 않다는 것입니다. 나는 다음 단계에서 문제를 일으키는 많은 NaN을 얻는다. ...

어떤 도움이라도 대단히 감사하겠습니다!

+0

x 좌표, y 좌표 등이 포함 된 행렬에 대해 좀 더 구체적으로 설명 할 수 있습니까? 예를 들어 그 크기는 얼마입니까? –

+0

1x (8t) double입니다. 여기서 t는 트랙의 길이입니다. 예를 들어, 20 개의 시간 지점을 가진 트랙은 1x160 배의 결과를 가져옵니다. – mtmtmt

+0

귀하의 예제는 셀 배열이 아니므로 셀 배열이 필요합니까, 아니면 두 배 배열에 만족하십니까? –

답변

1

다음은 각 트랙에 대한 정보가 들어있는 구조에서 원하는 데이터를 가져 오는 데 도움이되는 약간의 코드입니다.

내 샘플 코드에서 시간, X 및 Y 좌표에 대한 더미 값을 생성 한 다음 셀 배열에 넣습니다. 셀 배열에는 궁극적으로 지정한 형식의 데이터가 각 시점에 포함되어 있습니다.

트랙에 대한 정보가 X_Coord 및 Y_Coord라는 필드가있는 DataStruct라는 구조에 저장되어 있다고 가정합니다. 귀하의 경우,이 정보는 매트릭스에 있으므로 색인 생성이 구조에서 수행되는 방식이 달라집니다. 주석에서 말했듯이, 행렬의 크기는 1x8 (TimePoints)이므로, 예를 들어 변형 된 요소를 사용하여 더 쉽게 요소의 요소에 액세스 할 수 있어야합니다.

clc; 
clear all; 

% Generate dummy values 
for t = 1:10 
DataStruct(t).X_Coord = t; 
DataStruct(t).Y_Coord = 10*t+1; 
end 

Data_Cell = cell(length(DataStruct),3); % Pre-allocation 

% Fetch each field of interest and put into cell array, along with the 
% time. 
for k = 1:length(DataStruct) 

    Data_Cell(k,:) = {(k) (DataStruct(k).X_Coord) (DataStruct(k).Y_Coord)}; 

end 

Data_Cell 

이 다음 셀 어레이 결과 :

Data_Cell = 

    [ 1] [ 1] [ 11] 
    [ 2] [ 2] [ 21] 
    [ 3] [ 3] [ 31] 
    [ 4] [ 4] [ 41] 
    [ 5] [ 5] [ 51] 
    [ 6] [ 6] [ 61] 
    [ 7] [ 7] [ 71] 
    [ 8] [ 8] [ 81] 
    [ 9] [ 9] [ 91] 
    [10] [10] [101] 

그런 다음 cell2mat를 사용하여 두 배의 배열로 변환 할 수 있습니다; 희망을 시작하는 데 도움이됩니다!

편집 :

DummyArray = zeros(10,3); 

% Generate dummy array with numbers and NaNs. 
DummyArray(:,1) = 1:10; 
DummyArray(:,2) = [1 2 NaN NaN 5 6 7 8 NaN NaN]; 
DummyArray(:,3) = [NaN 21 NaN 41 51 NaN 71 81 91 NaN]; 
:
아래 의견에 따라, 여기가 NaN 광고 모두 x와 y 좌표가 해당 시간과 함께 새로운 매트릭스에 저장 식별 할 수있는 것입니다 이 더미 행렬 제공

:

,223,525 :

DummyArray = 

     1  1 NaN 
     2  2 21 
     3 NaN NaN 
     4 NaN 41 
     5  5 51 
     6  6 NaN 
     7  7 71 
     8  8 81 
     9 NaN 91 
     10 NaN NaN 

%Find row indices in which both x and y coordinates are actual numbers 
NotNaN = DummyArray(~isnan(DummyArray(:,2)) & ~isnan(DummyArray(:,3))); 

%Use logical indexing to retrieve the corresponding time, x- and y 
%coordinates all in the same matrix. 
FinalMatrix = [DummyArray(NotNaN,1) DummyArray(NotNaN,2) DummyArray(NotNaN,3)] 

출력은 다음과 같다

그리고 거기 가세요!

+0

빠른 답변을 보내 주셔서 감사합니다. 도움이 되었기 때문에 데이터를 멋지게 분리 된 형식으로 가져올 수있었습니다. 나는 이제 다음과 같은 것을 가지고있다 : - 하나의 커다란, 시간에 대해 1000x1 double을 가정하자 - x에 대해 하나 double 그리고 y에 대해 하나의 particle은 하나의 particle을위한 것이다. 필요한 것은 시간 지점과 x 및 y 좌표 (t/x/y)를 가져 와서 각 입자에 대해 하나의 요소 인 셀 배열에 씁니다. 문제 : x와 y 좌표에는 많은 NaN이 있습니다. (2) 시간 지점이 적절히 추가되었는지 확인해야합니다 (예 : 46x 및 y 좌표 -> 46 시간 지점). – mtmtmt

+0

님은 어떻게해야하는지 아이디어가 있습니까? :) – mtmtmt

+0

좋아, 곧 내 대답을 편집 할게. 그 동안 ~ isnan (Matrix)을 사용하여 Matrix에서 NaN이 아닌 요소를 찾을 수 있습니다. 아, 각각의 행에 하나의 입자에 대한 데이터가 포함되어 있다는 것을 의미합니까? –