helintrlv

Транспозиция символов с помощью спирального массива

Синтаксис

intrlved = helintrlv(data,col,ngrp,stp)
[intrlved,state] = helintrlv(data,col,ngrp,stp)
[intrlved,state] = helintrlv(data,col,ngrp,stp,init_state)

Описание

intrlved = helintrlv(data,col,ngrp,stp) транспозиция символов в data путем размещения их в неограниченном массиве строк по спирали и последующего размещения строк массива в выход intrlved. data должно иметь col*ngrp элементы. Если data - матрица с несколькими строками и столбцами, она должна иметь col*ngrp строки, и функция обрабатывает столбцы независимо.

Функция использует массив внутри для своих расчетов. Массив имеет неограниченные строки, индексируемые 1, 2, 3,..., и col столбцы. Функциональные разделы col*ngrp символы от входов до последовательных групп ngrp символы. Функция помещает k-ю группу в массив вдоль столбца k, начиная с строки 1 + (k-1) * stp. Положения в массиве, не содержащем входных символов, имеют значения по умолчанию 0. Функция помещает col*ngrp символы из массива в выходах, intrlved, путем чтения первого ngrp строки последовательно. Некоторые выходные символы являются значениями по умолчанию 0, а не входными символами; точно так же некоторые входные символы остаются в массиве и не появляются в выходах.

[intrlved,state] = helintrlv(data,col,ngrp,stp) возвращает структуру, которая содержит окончательное состояние массива. state.value хранит входные символы, которые остаются в col столбцы массива и не отображаются в выходах.

[intrlved,state] = helintrlv(data,col,ngrp,stp,init_state) инициализирует массив с символами, содержащимися в init_state.value. Структура init_state обычно является state выход от предыдущего вызова этой же функции, и не связан с соответствующим обратным перемежителем. В этом синтаксисе некоторые выходные символы являются значениями по умолчанию 0, некоторые являются входными символами от data, а некоторые являются значениями инициализации из init_state.value.

Примеры

В приведенном ниже примере целые числа переставляются с 1 до 24.

% Interleave some symbols. Record final state of array.
[i1,state] = helintrlv([1:12]',3,4,1);
% Interleave more symbols, remembering the symbols that
% were left in the array from the earlier command.
i2 = helintrlv([13:24]',3,4,1,state);

disp('Interleaved data:')
disp([i1,i2]')
disp('Values left in array after first interleaving operation:')
state.value{:}

Во время последовательных вызовов helintrlv, он внутренне создает массивы с тремя столбцами

[1  0  0;
 2  5  0;
 3  6  9;
 4  7 10;
 0  8 11;
 0  0 12]

и

[13  8 11;
 14 17 12;
 15 18 21;
 16 19 22;
  0 20 23;
  0  0 24]

Во втором массиве, показанном выше, 8, 11 и 12 являются значениями, оставшимися в массиве от предыдущего вызова функции. Определение init_state вход во второй вызов функции приводит к тому, что она использует эти значения, а не значения по умолчанию 0.

Ниже приведены выходы из этого примера. (Матрица была транспонирована в целях отображения.) Перемеженные данные поступают из четырех верхних строк трехколоночных массивов, показанных выше. Заметьте, что некоторые символы в первой половине перемеженных данных являются значениями по умолчанию 0, некоторые символы во второй половине перемеженных данных были оставлены в массиве от первого вызова до helintrlvи некоторые из входа символов (20, 23 и 24) вообще не появляются в перемеженных данных.

Interleaved data:
  Columns 1 through 10 

     1     0     0     2     5     0     3     6     9     4
    13     8    11    14    17    12    15    18    21    16

  Columns 11 through 12 

     7    10
    19    22

Values left in array after first interleaving operation:

ans =

     []


ans =

     8


ans =

    11    12

Пример на странице с описанием для heldeintrlv также использует эту функцию.

См. также

Представлено до R2006a