2013-04-08 340 views
6

我对Matlab不太熟悉,所以提前对这个愚蠢的问题表示歉意。我想将数字1指定给矩阵的某些特定位置。我有一个行向量和相应的列向量。我试图给这些位置分配数次数次。但是,它没有工作。这是一个更小的代码示例。假设有一个4 * 4矩阵,我想将矩阵(1,1),矩阵(2,3)和矩阵(3,4)分配给1。这就是我所做的。如何在MATLAB中为矩阵的特定位置赋值?

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-matri x?rq = 1 – 2013-04-08 05:59:10

+0

非常感谢。我检查了这篇文章,它非常有帮助。 – Cassie 2013-04-08 06:06:57

回答

8

您可以使用sub2ind来计算要分配到并使用这些分配的位置的线性指标:

indices = sub2ind(size(matrix), row, col); 
matrix(indices) = 1; 
+0

非常感谢。有效 ! – Cassie 2013-04-08 06:06:18

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

非常感谢您的回复。但是,我的矩阵的实际大小是数千。我无法一一分配。那么无论如何要使用我有的行向量和列向量?谢谢 – Cassie 2013-04-08 05:53:36

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}