2016-10-27 2 views
1

Im обучения Matlab, как у меня есть свободное время. Матрица B - это половина длины матрицы C Я хочу, чтобы каждое значение в первом столбце матрицы B заполняло каждое другое значение в первом столбце матрицы C Чтобы сделать это, я использую цикл for. В настоящее время я получаю все остальные значения, заполненные последним числом в столбце матрицы B. Что мне нужно изменить?Использование матрицы для заполнения каждого другого значения в столбце

Z=length(A); 
X = length(B); 
C = zeros(size(A); 
for n = 1:2:Z 
    for m = 1:1:X    
     C(n,1) = B(m,1); 
    end 
end 

ответ

0

Вы можете использовать функцию kron:

reps = 2; 
delta = zeros(reps,1); 
B = magic(5); 
C = kron(B,delta); 

Здесь rep указывает, что каждое второе значение должно быть взято из B. Но вы также можете дублировать значения с помощью delta = ones(reps,1); или любого интересующего вас микса, изменив delta.

Кроме того, вы можете изменить размер delta на вектор строки, а затем можете дублировать значения вдоль строк. Или, разрешив delta быть матрицей, вы можете получить больше причудливых вещей.

+0

Я получил эту работу с тем, что я хотел, и спас меня шаг вниз по линии, используя его для заполнения 2-я колонка. Я закончил использование цикла for, чтобы заполнить каждое другое значение нулем, чтобы достичь того, что я хотел. Спасибо, что показали мне это! – Swagnon

+0

Да, для этого вам не нужно использовать какие-либо for-loops, даже если вы не хотите, чтобы это значение было равным нулю, вы можете впоследствии их изменить 'C (C == 0) = NewValue;'. – mpaskov

0

Вы можете просто написать это:

B = magic(4); % The small matrix with the values 
C = zeros(size(A)*2); % The matrix to fill the values in 
C(1:2:end,1) = B(:,1) % populating the matrix 

и вы получите:

C = 
    16  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0 
    5  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0 
    9  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0 
    4  0  0  0  0  0  0  0 
    0  0  0  0  0  0  0  0 
Смежные вопросы