我有一个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中执行此操作?
答案 0 :(得分:4)
使用sub2ind
很容易实现。您可以将行和列位置转换为单个线性索引,然后使用它并将1
分配给输出矩阵的每个位置。我将假设其他位置为零(0
)。换句话说,假设A
是您定义的7 x 5
输出矩阵并且问题定义中的矩阵是M
(11 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