Транспозиция символов с помощью спирального массива
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
также использует эту функцию.