MATLAB组合不同维度的矩阵,填充相应索引的值

时间:2013-04-25 14:12:14

标签: matlab join matrix fill

我有两个矩阵,22007x3352x2。每个中的第一列是一个索引,大多数(但不是全部)都是共享的(即x1包含不在x2中的索引)。

我想将两个矩阵组合成一个22007x4矩阵,这样第4列就会填充与原始矩阵中特定索引相对应的值。

例如:

x1 =
    1   1   5
    1   2   4
    1   3   5
    2   1   1
    2   2   1
    2   3   2

x2 =
    1   15.5
    2   -5.6

变为

x3 =
    1   1   5   15.5
    1   2   4   15.5
    1   3   5   15.5
    2   1   1   -5.6
    2   2   1   -5.6
    2   3   2   -5.6

我尝试了一些

的方法
x3(1:numel(x1),1:3)=x1;
x3(1:numel(x2(:,2)),4)=x2(:,2);

但首先我收到了错误

??? Subscripted assignment dimension mismatch.

然后我无法弄清楚我会填补其余部分。

重要的一点是,我的数据中每个索引的行数不一定相同。

我如何才能使这项工作?

1 个答案:

答案 0 :(得分:3)

here

获取Amro的答案
[~, loc] = ismember(x1(:,1), x2(:,1)); 

ismember的第二个参数返回x2中可以找到x1的每个元素的位置(如果不能,则返回0)

a = x2(loc(loc > 0), 2);

使用这些行索引获取相关值但不包括零,因此loc > 0掩码。您必须将这些排除为1,它们不在x2和2中,您无法使用0进行索引。

创建一个新的默认值列以粘贴在x1的末尾。我认为NaN()可能更好,但zeros()也可以

newCol = NaN(size(x1,1),1)

现在使用逻辑索引来获取非零元素的位置,并将a放在这些位置

newCol(loc > 0) = a

Finnaly坚持到最后

x3 = [x1, newCol]