2017-02-16 6 views
1

У меня есть два вектора, R и C, которые имеют число строк и столбцов, соответственно, подматрицы, что мне нужно собрать в одна матрица I (40x20). Всего 12 подматриц.Matlab: Собрать подматрица, чье #cols и #rows сохраняется в векторе

R = [4  2  4  4  2  4]; 
C = [4 16 16  4]; 

Кроме того, все элементы каждой подматрицы имеют свое значение, сохраненное в векторе к:

k = [3 2 3 3 2 3 2 1 2 2 1 2 2 1 2 2 1 2 3 2 3 3 2 3 ]; % 24 elements 

Так, например, подматрица М (1: 4,1: 4) имеет 4 строки и 4 столбца и значение, равное k (1) = 1.

ВОПРОС: Как я могу собрать матрицу M со всеми подматрицами?

Любые идеи? Спасибо!

EDIT:

матрицы M должна выглядеть следующим образом: enter image description here

и подматрицы:

enter image description here

и значения к:

enter image description here

+1

R и C не одинакового размера. Ваш вопрос не так ясен. Не могли бы вы предоставить образцы ввода и вывода? –

+0

Каков размер второй матрицы, содержащей 'k (2)', 2 x 16? Куда он отправляется в «М»? Можете ли вы показать еще несколько подматриц, чтобы четко определить, какая должна быть окончательная структура 'M'? Прямо сейчас я не вижу возможности комбинировать «R» (длина 6) и «C» (длина 4), чтобы составить 12 подматриц. Может быть, это 24 подматрицы? Кроме того, в каком порядке? – Florian

+0

Извините, я отредактировал вопрос, обновил k и вставил изображение матрицы из Excel. –

ответ

1

Вот Векторизованное решение:

R1 = repelem(1:numel(R), R); 
C1 = repelem(1:numel(C), C); 
[CC RR] = meshgrid(C1, R1); 
idx = sub2ind([numel(R), numel(C)], RR, CC); 
result = k(idx); 

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

carr = cell(numel(R), numel(C)); 
k1 = reshape(k,numel(R),numel(C)); 
for ii = 1:numel(R) 
    for jj = 1:numel(C) 
     carr(ii,jj)=repmat(K1(ii,jj), R(ii), C(jj)); 
    end 
end 
result = cell2mat(carr) 
+0

Это сработало замечательно! Большое спасибо! –