2016-06-02 7 views
0

Мне нужно увеличить матрицу A до матрицы B с размером n раз размером A. Значения должны быть повторены, например:Увеличить матрицу, повторяя ее значения

A размер 2x3, n = 3, приводит к B размера 6х9:

Примеры значений:

A = 
1 2 3 
4 5 6 

Результаты с:

B = 
1 1 1 2 2 2 3 3 3  
1 1 1 2 2 2 3 3 3 
1 1 1 2 2 2 3 3 3 
4 4 4 5 5 5 6 6 6 
4 4 4 5 5 5 6 6 6 
4 4 4 5 5 5 6 6 6 

Каков самый быстрый способ добиться этого в Matlab?

+2

еще один вариант является 'repelem' - повторять элементы в массиве. – GameOfThrows

ответ

2

Если у вас есть Image Processing Toolbox, вы можете легко сделать это, используя imresize с интерполяцией ближайшего соседа.

A = [1 2 3; 4 5 6]; 

% Repeat each element 3 times in each direction 
B = imresize(A, 3, 'nearest'); 

% 1  1  1  2  2  2  3  3  3 
% 1  1  1  2  2  2  3  3  3 
% 1  1  1  2  2  2  3  3  3 
% 4  4  4  5  5  5  6  6  6 
% 4  4  4  5  5  5  6  6  6 
% 4  4  4  5  5  5  6  6  6 

Если нет изображений Processing Toolbox, вы можете использовать interp2 с ближайшим соседом интерполяцией, чтобы сделать что-то подобное.

scaleFactor = 3; 


[xx,yy] = meshgrid(linspace(1, size(A, 2), size(A, 2) * scaleFactor), ... 
        linspace(1, size(A, 1), size(A, 1) * scaleFactor)); 


B = interp2(A, xx, yy, 'nearest'); 
+1

Откажитесь от ['' relem'] (http://www.mathworks.com/help/matlab/ref/repelem.html) – Dan

+0

@ Да, спасибо. – Pedro77

+1

@ Pedro77 Что касается скорости, я думаю, что «kron» будет трудно победить. – Suever

4

Существует также Кронекера Тензор продукта (kron) Функция:

n = 3; 
B = kron(A,ones(n)); 

B = 

    1  1  1  2  2  2  3  3  3 
    1  1  1  2  2  2  3  3  3 
    1  1  1  2  2  2  3  3  3 
    4  4  4  5  5  5  6  6  6 
    4  4  4  5  5  5  6  6  6 
    4  4  4  5  5  5  6  6  6 
+1

ах ты избил меня. Хороший! – GameOfThrows

+0

В эти дни вы можете просто использовать встроенную функцию '' replem' (http://www.mathworks.com/help/matlab/ref/repelem.html) – Dan

+0

ой, я не знал об этом –

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

  • Нет связанных вопросов^_^