难以在MATLAB中创建具有一些规范的新矩阵

时间:2014-08-29 04:33:44

标签: matlab

我有一个11 x 2大小的矩阵:

M = 
 1     1
 2     1
 3     1
 4     1
 1     2
 2     2
 3     2
 4     2
 5     2
 4     3
 5     3

我想创建一个大小为7 x 5的新矩阵。这个矩阵应该以这样的方式填充:M的每一行表示我想将这个新矩阵设置为1的位置具体来说,位置(1,1)结果必须为1,下一个位置(2,1)为1,直到最后一个位置(5,3)为1。

如何在MATLAB中执行此操作?

1 个答案:

答案 0 :(得分:4)

使用sub2ind很容易实现。您可以将行和列位置转换为单个线性索引,然后使用它并将1分配给输出矩阵的每个位置。我将假设其他位置为零(0)。换句话说,假设A是您定义的7 x 5输出矩阵并且问题定义中的矩阵是M11 x 2矩阵),请执行此操作:

ind = sub2ind([7 5], M(:,1), M(:,2));
A = zeros(7, 5);
A(ind) = 1;
因此

A

A =

 1     1     0     0     0
 1     1     0     0     0
 1     1     0     0     0
 1     1     1     0     0
 0     1     1     0     0
 0     0     0     0     0
 0     0     0     0     0

或者,您可以使用sparse并使用您在问题中定义的矩阵元素作为元素来创建非零条目,而其余元素为零。在我们的例子中,我们将这个由M的值定义的稀疏矩阵的每个位置设置为1。然后,我们使用full将矩阵转换回其正确的形式。就这样:

Asparse = sparse(M(:,1), M(:,2), 1, 7, 5);
A = full(Asparse);

我们得到了我们在第一种方法中看到的预期:

A =

 1     1     0     0     0
 1     1     0     0     0
 1     1     0     0     0
 1     1     1     0     0
 0     1     1     0     0
 0     0     0     0     0
 0     0     0     0     0