如何在MATLAB中为矩阵的特定位置分配数值?

7

我对Matlab不是很熟悉,对于这个愚蠢的问题提前道歉。我想将数字1分配给矩阵的某些特定位置。我有一行向量和相应的列向量。我尝试过多次在这些位置上赋值,但它没有起作用。以下是一个更小的代码示例。假设有一个4x4矩阵,我想将矩阵(1,1),矩阵(2,3)和矩阵(3,4)分配为1。这是我所做的。

matrix = zeros(4,4);
row = [1 2 3];
col = [1 3 4];
matrix(row,col)=1;

然而,我得到的答案是:
matrix=[ 1 0 1 1
         1 0 1 1
         1 0 1 1
         0 0 0 0]    

有人能指出我在这里做错了什么吗?我要处理的矩阵的实际大小是成千上万的,所以我不能手动逐个分配这些位置。是否有任何方法可以使用我拥有的行向量和列向量来分配值1?非常感谢。


2
这可能很有用:http://stackoverflow.com/questions/6850368/how-can-i-change-the-values-of-multiple-points-in-a-matrix?rq=1 - Danil Asotsky
非常感谢您。我已经查看了此帖子,它非常有帮助。 - Cassie
3个回答

10
你可以使用sub2ind来计算你想要分配的位置的线性索引,并将其用于赋值:
indices = sub2ind(size(matrix), row, col);
matrix(indices) = 1;

1
matrix(1,1) = 1
matrix(2,3) = 1
matrix(3,4) = 1

2
非常感谢您的回复。但是,我的矩阵实际大小为数千个。我无法一个一个地分配。那么有没有办法使用我拥有的行向量和列向量呢?谢谢。 - Cassie

1

有点小隆起。除非你要处理很多不连续的行或列,否则一个非常有用的方法是这样的

matrix(1:3,2:4)=1

它能够非常轻松地支持元素数学。
这将会变成:
{0 0 0 0}
{0 0 0 0}
{0 0 0 0}
{0 0 0 0}

转为

{0 1 1 1}
{0 1 1 1}
{0 1 1 1}
{0 0 0 0}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接