2012-08-01 4 views
0

행렬이 1 행이고 값이 각각 5448 행입니다. 실제로 이러한 5448 값은 12 탭 (탭 당 454 값)으로 나뉩니다. 탭 경계에 가장 가까운 값의 10 %를 가장 근접하게 인덱싱하려고합니다 (탭의 10 %는 45.4 값이므로 45 값을 말합니다). 첫 번째 탭의 경우 마지막 10 % 만 필요하며 마지막 탭 (12 번 탭)의 경우 처음 10 % 만 필요합니다. 다른 모든 탭 (2-11)은 처음 10 %와 마지막 10 %가 필요합니다. 따라서 본질적으로 각 탭의 처음 45 개 값과 마지막 45 개 값입니다. 행렬을 세그먼트로 색인화하는 방법

현재이 같은 값 세그먼트를 추출하고있어 :

A1 = interpolate((817/2+.5):(908/2),:); 
B1 = interpolate((909/2+.5):(1000/2),:); 

이 예에서는 탭 (2)로부터 탭 (1)의 마지막 10 % 값과 제 10 % 값을 포함하는 전 몇 부분이 있다면 이것을 풀려면 괜찮을 것이지만, 약 4 만개의 값을 가지는 행렬을 가질 때,이 방법은 조금 우스꽝스러워진다.

내가 바보 같은 실수를 피하기 위해이 값을 얻을 수있는 기능을 할 것 (당신이 당신의 탭 크기 나 비율을 변경하는 경우 더 쉽게하기 위해)

답변

3

:

function [A, B] = GetTapBoundaries(arr, tapNum, tapSize) 
    sliceSize = floor(tapSize * 0.1); 
    boundaryIdx = (tapNum-1) * tapSize; % last element in previous tap 

    leftIdx = boundaryIdx - sliceSize + 1; 
    rightIdx = boundaryIdx + sliceSize; 

    if leftIdx >= 1 && boundaryIdx <= size(arr,1) 
     A = arr(leftIdx:boundaryIdx, :); 
    else 
     A = []; 
    end 

    if boundaryIdx >= 0 && rightIdx <= size(arr, 1) 
     B = arr(boundaryIdx+1:rightIdx, :); 
    else 
     B = []; 
    end 
end 

지금과 같이 전화 :

tapSize = 454; 
[A1, B1] = GetTapBoundaries(interpolated, 1, tapSize); 
[A2, B2] = GetTapBoundaries(interpolated, 2, tapSize); 
% etc ... 
[A12, B12] = GetTapBoundaries(interpolated, 12, tapSize); 

아니면 사용할 수 셀 어레이 : 어떤 구문 또는 논리적 오류에 대한

tapSize = 454; 
numTaps = floor(size(interpolated,1)/tapSize); 
A = cell(numTaps,1); 
B = cell(numTaps,1); 
for tap = 1:numTaps 
    [Ax, Bx] = GetTapBoundaries(interpolated, tap, tapSize); 
    A(tap) = Ax; 
    B(tap) = Bx; 
end 

죄송합니다. .. 나는 방금 MATLAB에서이 코드를 확인하지 않고이 코드를 브라우저에 넣었습니다.

+0

구문이나 논리 오류, 실제로 자리에 꽤;) btw 사랑해, 하하, 그래, 지금이 일의 요점은 그 색인 hahaha지고 지저분 해. 초기 손으로 뽑은 인덱스는 내 초기 코드를 완성하기위한 목적이었습니다. –

+0

사실 두 번째 셀 어레이 방법은 작동하지 않습니다. 첫 번째 방법이 효과가 있는지 확인하는 중입니다. 나는 내일 다시 너에게 간다. –

+1

나는'A {tap} = Ax' 또는'A (tap) = {Axe} '를 대신 할 필요가 있었다. 나는 몰라, 때로는 셀 어레이와 혼동한다. 하지만 그것은 당신이 처분 할 때 MATLAB 명령 편집기를 가지고있을 때 해결할 수있는 확실한 구문입니다. =) – paddy