2013-07-16 2 views
0

행이 n 개의 행으로 구성되어 있고 각 행에 세 개의 좌표 (x, y 및 z)가 포함되어 있다고 가정합니다. MATLAB에서 100 점마다 표준 편차를 계산하고 싶습니다. 예를 들어 처음 100 x 좌표의 경우 std을 적용한 다음 y 좌표와 z 좌표를 동일하게하는 등 결국 100 포인트마다 x, y 및 z 값을 하나씩 갖게됩니다. 어떻게해야합니까?nx3 벡터에서 100 포인트마다 표준 편차를 계산하는 방법은 무엇입니까?

+0

당신이 몇 가지 코드가 무엇인지를 보여주는 게시 할 수 : 당신은 3 열 매트릭스의 모든 결과를 저장하려면, 당신은 단지 "표준"라인을 수정하고 다음과 같이 몇 가지 초기화를 추가 지금까지 해봤습니까? – Dan

+0

매트릭스의 크기를 잘못 해석 한 것처럼 느껴지지만 어느 것이 든 내 대답을 기반으로하는 작업 솔루션을 얻는 것이 너무 어렵지 않아야합니다. –

+0

많은 데이터가 있으므로 별도로 실행 해 볼 수 있습니다. 예를 들어 첫번째 세트에는 약 3000 세트의 포인트가 있습니다. –

답변

2

내가 이런 짓을 했을까 :

M = randn(120,3); % substitute this for the actual data; 3 columns 
N = 100; % number of elements in each set for which std is computed 

cols = size(A,1); 
for n = 1:ceil(cols/N) 
    row_ini = (n-1)*N+1; 
    row_fin = min(n*N, cols); % the "min" is in case cols is not a multiple of N 
    std(A(row_ini:row_fin,:)) 
end 

속도가 문제가되는 경우 루프 "를"아마, 벡터화 할 수있다.

편집 :

M = randn(120,3); % substitute this for the actual data; 3 columns 
N = 100; % number of elements in each set for which std is computed 

cols = size(A,1); 
n_max = ceil(cols/N); 
result = repmat(NaN,ceil(cols/N),3); % initialize 
for n = 1:n_max 
    row_ini = (n-1)*N+1; 
    row_fin = min(n*N, cols); % the "min" is in case cols is not a multiple of N 
    result(n,:) = std(A(row_ini:row_fin,:)); 
end 
+0

정말 고마워요! 하나의 마지막 질문 -이 모든 것을 하나의 새로운 벡터에 저장하려면 어디에 넣어야합니까? 내가 3 x n 벡터로 모두 그것을 원한다고 말할 수 있을까요? 또는 모든 행의 평균을 취하여 1 x n 벡터를 얻고 싶습니까? –

+0

수정 된 솔루션을 게시했습니다. –

+0

와우 멋진데, 고마워! –

관련 문제