2015-05-18 5 views
1

Я дал следующие матрицы A размера 3x1 и B размера 5x1Изменение размера матрицы в MATLAB

A = B= 

1  A 
2  B 
3  C 
     D 
     E 

Я хочу, чтобы преобразовать матрицу C в 15x2 матрицы

C = 

1 A 
1 B 
1 C 
1 D 
1 E 
2 A 
    . 
    . 
    . 
3 E 

Как я могу это сделать?

+1

взгляда на '' repmat', kron' и т.д ... Я поставил доллар Луис ответит с помощью bsxfun в течение следующих 15 минут ... – bla

ответ

2

Вот другая альтернатива на основе кода для создания таблиц истинности из Generate All Possible combinations of a Matrix in Matlab

ind = dec2base(0:power(5,2)-1,5)-47; 
C = [A(ind(1:15,1) + 48, B(ind(1:15,2)]; 

И если вы хотите обобщить его

m = max(size(A,1),size(B,1)); 
n = size(A,1)*size(B,1); 
col = 2; 
ind = dec2base(0:power(n,col)-1,n)-47; 
ind = ind(1:n,:); 
C = [A(ind(:,1) + 48, B(ind(:,2)]; 

+ 48 - это просто конвертировать ваши A матрицы от числовой матрицы до матрицы символов, так что C может содержать как число, так и буквы. Вы можете оставить его, если A уже был матрицей символов.

Что полезно об этом методе является то, что при изменении col, это обобщается на расчесывание больше, чем просто два вектора аналогичным образом

3

Может быть сделано с repmat

D = repmat(A',size(B,1),1); 
C = [D(:),repmat(B,size(A,1),1)] 
+0

Думаю, вам нужно преобразовать 'D' в массив символов, не так ли? 'C = [D (:) + 48, repmat (B, размер (A, 1), 1)]' кажется, это делает – Dan

+1

Я предположил, что символы были только для иллюстрации. В противном случае он должен, вероятно, использовать клетки. – Steffen

+0

Также стоит упомянуть, что с 2015 года вы можете заменить 'D' на' repeatle', как 'C = [repeatlem (A, размер (B, 1)), repmat (B, размер (A, 1), 1)]' – Dan

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