Matlab: сортировка и случайные - PullRequest
1 голос
/ 06 июля 2011

Мне нужно отсортировать несколько маленьких матриц из 1 огромной необработанной матрицы ... в соответствии с сортировкой 1-го столбца (1-й столбец содержит 1, 2 или 3) ...

если 1-й столбец равен 1, то случайным образом 75% от 1 сохраняются в файле A1, 25% от 1 сохраняются в файле A2.

если 1-й столбец равен 2, то случайным образом 75% от 2 сохраняются в файле B1, 25% от 2 сохраняются в файле B2.

если 1-й столбец равен 3, то случайным образом 75% от 3 сохраняются в файле C1, 25% от 3 сохраняются в файле C2.

как мне написать код?

Пример:

необработанная матрица имеет 15 строк x 6 столбцов:

7 строк - 1 в 1-м столбце, 5 строк - 2 в 1-м столбце, а 3 строки - 3 в 1-м столбце.

1   -0.05   -0.01   0.03    0.07    0.11

1   -0.4    -0.36   -0.32   -0.28   -0.24

1   0.3 0.34    0.38    0.42    0.46

1   0.75    0.79    0.83    0.87    0.91

1   0.45    0.49    0.53    0.57    0.61

1   0.8 0.84    0.88    0.92    0.96

1   0.05    0.09    0.13    0.17    0.21

2   0.5 0.54    0.58    0.62    0.66

2   0.4 0.44    0.48    0.52    0.56

2   0.9 0.94    0.98    1.02    1.06

2   0.85    0.89    0.93    0.97    1.01

2   0.75    0.79    0.83    0.87    0.91

3   0.36    0.4 0.44    0.48    0.52

3   0.6 0.64    0.68    0.72    0.76

3   0.4 0.44    0.48    0.52    0.56

7 строк получили 1 в 1-м столбце, случайным образом вынимают 75% из 7 строк (что составляет 7 * 0,75 = 5,25), чтобы быть новой матрицей (5 рядов x 6 столбцов), остальные 25% становятся другой новой матрицей

5 строк получили 2 в 1-м столбце, случайным образом вынимают 75% из 5 строк (что составляет 5 * 0,75 = 3,75) в качестве новой матрицы (4 строки x 6 столбцов), остальные 25% становятся еще одной новой матрицей

3 строки получили 3 в 1-м столбце, случайным образом вынимают 75% из 3 строк (что составляет 3 * 0,75 = 2,25), чтобы быть новой матрицей (2 ряда x 6 столбцов), остальные 25% становятся другой новой матрицей

Результат:

A1=

1   -0.4    -0.36   -0.32   -0.28   -0.24

1   0.3 0.34    0.38    0.42    0.46

1   0.75    0.79    0.83    0.87    0.91

1   0.8 0.84    0.88    0.92    0.96

1   -0.05   -0.01   0.03    0.07    0.11

B1=

2   0.9 0.94    0.98    1.02    1.06

2   0.85    0.89    0.93    0.97    1.01

2   0.5 0.54    0.58    0.62    0.66

2   0.75    0.79    0.83    0.87    0.91

C1=

3   0.36    0.4 0.44    0.48    0.52

3   0.4 0.44    0.48    0.52    0.56

1 Ответ

1 голос
/ 06 июля 2011

вот одно из возможных решений вашей проблемы с использованием функции randperm:

% Create matrices
firstcol=ones(15,1);
firstcol(8:12)=2;
firstcol(13:15)=3;
mat=[firstcol rand(15,5)];
% Sort according to first column
A=mat(mat(:,1)==1,:);
B=mat(mat(:,1)==2,:);
C=mat(mat(:,1)==3,:);
% Randomly rearrange lines
A=A(randperm(size(A,1)),:);
B=B(randperm(size(B,1)),:);
C=C(randperm(size(C,1)),:);
% Select first 75% lines (rounding)
A1=A(1:round(0.75*size(A,1)),:);
A2=A(round(0.75*size(A,1))+1:end,:);
B1=B(1:round(0.75*size(B,1)),:);
B1=B(round(0.75*size(B,1))+1:end,:);
C1=C(1:round(0.75*size(C,1)),:);
C1=C(round(0.75*size(C,1))+1:end,:);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...