2013-06-07 4 views
3

Matlab имеет circshift, который перемещает матрицу круговым, т. Е. Сдвинув элементы на противоположную сторону.Некруглый сдвиг в Matlab?

Есть ли функция, которая сдвигает матрицу с копированием последних значений или заполнением нового пространства нулями? Как побитовое смещение в C/C++ делает?

UPDATE

Я знаю, что могу написать функционировать самостоятельно.

+0

['bithift()'] (http://www.mathworks.co.uk/help/matlab/ref/bitshift.html)? – Oleg

+0

Нет, я имел в виду сдвиг элементов, а не бит. –

+0

Просьба привести пример. – Oleg

ответ

1

Нет, нет. Если бы это было так, это было бы в разделе «Сортировка и переформатирование массивов» в главном списке функций Matlab.

http://www.mathworks.com/help/matlab/array-manipulation.html

Итак, как вы говорите, вы должны написать свой собственный. Вероятно, вы могли бы сделать довольно кратким образом, написав логику сдвига по размеру 1 и используя shiftdim в цикле, чтобы повернуть матрицу, чтобы эффективно применить ее ко всем запрошенным размерам сдвига, а затем вернуться к исходной размерной ориентации.

0

Возможно, вы используете circshift и установите смещенное пространство в ноль вручную. Например, если вам пришлось перенести матрицу слева и имеют нули дополняется справа, вы могли бы сделать что-то вроде:

shifted_mat = circshift(mat, -1, 2); 
shifted_mat(:, end) = 0; 

-1 и 2 в circshift обозначают величину и направление сдвига соответственно. Вы можете использовать это для смещения вверх и вниз.

Смежные вопросы