Как добавить дополнительные нулевые массивы - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть следующая проблема в моей симуляции.

A - это массив 24 x 2. Я собираюсь разделить его и получить 4 или 12 массив. Это означает, что я группирую 6 или 2 массива. Все будет хорошо, если я использую даже коэффициент «сплит». Если это нечетно, я не могу разделить A. [Я не могу сгруппировать 5 или 7, потому что 24/5 = 4 * 5 + 4 (или 5 * 5 -1) или 24/7 = 7 *3 + 3.

Вот почему я собираюсь сделать следующее:

Если у меня есть 24 x 2 и мне нужна группа каждые 5 вместе:

block 1 : A(1,:), A(2,:),A(3,:),A(4,:),A(5,:)
block 2 : A(6,:), A(7,:),A(8,:),A(9,:),A(10,:)
block 3 : A(11,:), A(12,:),A(13,:),A(14,:),A(15,:)
block 4 : A(16,:), A(17,:),A(18,:),A(19,:),A(20,:) 
block 5 : A(21,:), A(22,:),A(23,:),A(24,:), ?

Как вы можетевидите, 5-й блок не заполнен, Matlab выдает мне ошибку. Моя идея состоит в том, чтобы создать A (25,:) = 0. Для моего моделирования это будет нормально. Я собираюсь смоделировать его как function:

A=rand(m,n)
w- # number of a vector that i would like group together ( in ex., it is `5`)
if mod(w,2)==0
   if mod(m,2)==0
       % do....
   else 
       %  remainder = 0
   end
else
    if mod(m,2)==0
       %  remainder = 0
   else 
       %do...
   end 

Я собирался смоделировать, как указано выше, но потом я заметил, что это не работает. Потому что 24/10 = 2 * 10 + 4. Поэтому я должен написать что-то еще

Я могу найти напоминание как r = rem(24,5). Как пример выше, MatLab дает мне r=4. Затем я могу найти разницу c= w-r =1, и после этого я не знаю, как это сделать.

Не могли бы вы подсказать мне, как смоделировать такой расчет?

1 Ответ

2 голосов
/ 04 ноября 2019

Определите количество необходимых блоков, рассчитайте виртуальное количество строк, необходимое для заполнения этих блоков, и добавьте столько нулевых строк к A, сколько разность между виртуальным и фактическим количеством строк. Поскольку вы не упомянули, как должен выглядеть фактический вывод (массив, массив ячеек, ...), я выбрал массив reshaped.

Вот код:

m = 24;
n = 2;
w = 5;

A = rand(m, n)

% Determine number of blocks
n_blocks = ceil(m / w);

% Add zero rows to A
A(m+1:w*n_blocks, :) = 0

% Reshape A into desired format
A = reshape(A.', size(A, 1) / n_blocks * n, n_blocks).'

Вывод (сокращенно):

A =
   0.9164959   0.1373036
   0.5588065   0.1303052
   0.4913387   0.6540321
   0.5711623   0.1937039
   0.7231415   0.8142444
   0.9348675   0.8623844
   [...]
   0.8372621   0.4571067
   0.5531564   0.9138423

A =
   0.91650   0.13730
   0.55881   0.13031
   0.49134   0.65403
   0.57116   0.19370
   0.72314   0.81424
   0.93487   0.86238
   [...]
   0.83726   0.45711
   0.55316   0.91384
   0.00000   0.00000

A =
   0.91650   0.13730   0.55881   0.13031   0.49134   0.65403   0.57116   0.19370   0.72314   0.81424
   0.93487   0.86238   0.61128   0.15006   0.43861   0.07667   0.94387   0.85875   0.43247   0.03105
   0.48887   0.67998   0.42381   0.77707   0.93337   0.96875   0.88552   0.43617   0.06198   0.80826
   0.08087   0.48928   0.46514   0.69252   0.84122   0.77548   0.90480   0.16924   0.82599   0.82780
   0.49048   0.00514   0.99615   0.42366   0.83726   0.45711   0.55316   0.91384   0.00000   0.00000

Надеюсь, что поможет!

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