Добавить значение ячейки из строки матрицы на основе соответствующего индекса в другую строку матрицы - PullRequest
0 голосов
/ 21 марта 2019

У меня есть два массива A и B.

Столбец 1 массива A содержит порядковый номер выборок; другие столбцы матрицы A содержат другие атрибуты каждого образца (в массиве B первые две ячейки вдоль каждой строки содержат атрибут и порядковый номер образца).

Столбцы 2, 4 и 6 массива B содержат порядковый номер выборок, содержащихся в матрице A.

Я пытаюсь вставить соответствующий образец атрибута в столбце 4 массива A (на основе соответствующего номера индекса в массиве A и B) в новый 3-й, 6-й и 9-й столбцы матрицы B; иметь матрицу C, как показано ниже:

A = [1,3.43,2.34,5.43,3.22;2,8.32,6.34,7.34,2.34;3,3.67,8.34,8.23,1.34;4,2.67;6.89,4.99,8.65;5,1.33,5.42,2.53,6.13]     
B = [0.12,2,0.15,1,0.65,3;0.33,5,0.62,4,0.55,1;0.91,1,0.77,2,0.66,5]    
C = [0.12,2,7.34,0.15,1,5.43,0.65,3,1.34;0.33,5,2.53,0.62,4,4.99,0.55,1,5.43;0.91,1,5.43,0.77,2,7.34,0.66,5,2.53]

Я попробовал следующий код, но получил ошибку:

for i = 1:3
    f = ismember(A(:,1(i)), B(:,2), 'rows');
    k = find(f);
    f = A(f,4);
    C = [C,f(i)]
end

1 Ответ

0 голосов
/ 21 марта 2019

Прежде всего, у вас есть typo в вашей матрице A - другой размер строк. Может быть, вы имели в виду:

A = [1,3.43,2.34,5.43,3.22;
    2,8.32,6.34,7.34,2.34;
    3,3.67,8.34,8.23,1.34;
    4,2.67,6.89,4.99,8.65;
    5,1.33,5.42,2.53,6.13];

B = [ 0.12,2,0.15,1,0.65,3;
    0.33,5,0.62,4,0.55,1;
    0.91,1,0.77,2,0.66,5];

Так что, если вы запустите свой код, у вас будут хорошие цифры, но в плохом порядке. Вам следует попробовать:

Z = [0;0;0];
C = [[B(:,1:2) Z B(:,3:4) Z B(:,5:6)]]; %Generating satic part
for j = 1:3 %generating dynamic part in loop
    for i = 1:3
        n = A(find(ismember(A(:,(1)), B(i,j*2), 'rows')),4);
        C(i,j*3) = n;
    end
end

Вывод:

C =

    0.1200    2.0000    7.3400    0.1500    1.0000    5.4300    0.6500    3.0000    8.2300
    0.3300    5.0000    2.5300    0.6200    4.0000    4.9900    0.5500    1.0000    5.4300
    0.9100    1.0000    5.4300    0.7700    2.0000    7.3400    0.6600    5.0000    2.5300
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...