【问题标题】:Add cell value from a matrix row based on corresponding index to another matrix row根据相应索引将矩阵行中的单元格值添加到另一个矩阵行
【发布时间】:2019-03-21 14:04:44
【问题描述】:

我有两个数组 AB

数组A的第1列包含样本的索引号;矩阵A的其他列包含每个样本的其他属性,(在数组B中,每行的前两个单元格包含一个属性和一个样本的索引号)。

数组B的第2、4和6列包含矩阵A中包含的样本的索引号。

我正在尝试将数组A 的第4 列中的相应样本属性(基于数组AB 中的相应索引号)插入到新的矩阵B 的第3、6 和第9 列中;得到矩阵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

【问题讨论】:

    标签: arrays matlab indexing


    【解决方案1】:

    首先,您的 A 矩阵中有一个 typo - 行的大小不同。也许你的意思是:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多