2013-02-03 1 views
1

MATLAB에서 행렬은 80000 * 20 개입니다. 나는 열 1 (0-100)의 첫 100 개의 숫자, 열 1의 다음 (두번째) 100 개의 숫자 (101-200), 열 1의 세 번째 100 개의 숫자 (201)에 대한 평균, 최대 및 최소를 계산하고 싶습니다. -300) 등 모든 열에 대해 Simular. 행렬을 분리하려면 루프의 일종이 필요하다고 생각합니다. 행렬의 커다란 파급 효과 때문입니다. 어떻게해야합니까?MATLAB에서 매번 100 개마다 행렬의 각 열을 분리하는 방법

예 : 그래서 매트릭스 :

A1 A2 A3 A4 A5

B1 B2에서 B3의 B4의 B5

C1 C2 C3 C4 C5

D1 D2 D3 D4 D5

E1 E2 E3 E4 E5

F1 F2 F3 F4 F5

그러면 평균, 최소 및 최대 A1 B1 C1과 평균, 최소 및 최대 D1 E1 F1을 원합니다. 컬럼 2 (A2의 B2의 C2) 및 (D2 E2 F2)에 대한 시뮬 3,4,5,6..etc

안부

빈센트

+0

스택 오버플로에 오신 것을 환영합니다. 나중에 참조 할 수 있도록 여기에 질문을 게시 할 때 이미 시도한 내용을 나타내는 코드를 게시하는 것이 일반적입니다. 당신이 미래를 위해 그것을 많이 기억할 수 있다면 감사 할 것입니다. 건배. –

+0

ps 내 답변을 통해 문제가 해결되었다고 생각되면 질문 옆에있는 체크 표시를 클릭하여 답변을 표시하십시오. –

답변

1

여기서 두 가지 솔루션의 일례이다. 하나는 루프를 사용합니다. 다른 하나는 행렬을 셀 배열로 변환하고 cellfun을 사용하여 셀 배열에서 연산을 수행 한 다음 해답을 행렬로 다시 변환합니다.

%# Build random matrix X 
T = 12; 
N = 3; 
X = randi(100, T, N); 

%# Set the number of elements in each mean, min, and max calculation 
K = 4; 

%# Determine the number of groups 
L = T/K; 
if mod(L, 1) ~= 0; error('Number of rows not integer divisible by number of elements per group'); end 

%# Loop based solution 
Soln1 = nan(L, N); 
for k = 1:K-1 
    Soln1(k, :) = mean(X(k * K - K + 1:k * K, :)); 
end 

%# Loop-less solution 
CellOfMat = mat2cell(X, K * ones(L, 1), N); 
Soln2 = cellfun(@mean, CellOfMat, 'UniformOutput', 0); 
Soln2 = cell2mat(Soln2); 

위의 예에서 나는 mean 함수에 대한 해결책을 수행했습니다. maxmin의 경우는 그 기능의 대체시에 사소하게 따른다.

+0

이것은 매우 유용합니다. 도움을 주셔서 감사합니다! – user2037922

1

다음은 셀을 사용하지 않는 루프가없는 대안 솔루션입니다.

% M is the 80000x20 matrix 
rows_per_dataset = 100; 
rows_in_solution = size(M,1)/rows_per_dataset; 

% flatten out the matrix so each column is one dataset 
M_grouped = reshape(M,rows_per_dataset,rows_in_solution*size(M,2)); 
means = mean(M_grouped); 
means = reshape(means,rows_in_solution,size(M,2)); 
% the value in each row and column is the mean of the corresponding dataset 
% in the original data 

큰 데이터 세트의 경우 데이터를 임시 변수에 복사하는 것이 비효율적이며 루프 기반 솔루션이 더 좋습니다.

+0

좋은 대안, +1. –

+0

이것은 매우 유용합니다. 도움을 주셔서 감사합니다! 그러나 실제로 대형 매트릭스의 경우 루프 기반 솔루션이 더 좋을 수 있습니다. – user2037922