Arrays Matlab中的子集数组

Arrays Matlab中的子集数组,arrays,matlab,multidimensional-array,Arrays,Matlab,Multidimensional Array,嗯,我想改变零元素,例如,(它们是零不是重点),我正在使用这段代码,但当我转到子集时,它做得不好 matrix = [ -1 1 0; 2 0 -2; 0 3 -3] [rows,cols] = find(matrix==0) matrix = -1 1 0 2 0 -2 0 3 -3 rows = 3 2 1 cols = 1 2 3 matrix(row

嗯,我想改变零元素,例如,(它们是零不是重点),我正在使用这段代码,但当我转到子集时,它做得不好

matrix = [ -1 1 0; 2 0 -2; 0 3 -3]
[rows,cols] = find(matrix==0)


matrix =
    -1     1     0
     2     0    -2
     0     3    -3
rows =
     3
     2
     1
cols =
     1
     2
     3


matrix(rows,cols)
ans =
     0     3    -3
     2     0    -2
    -1     1     0
为什么它只返回三个元素,却返回整个矩阵


因此,如果我使用矩阵(rows,cols)=1,它将整个矩阵返回为1,而不仅仅是零元素。

MATLAB语法提供了几个选项来访问数组中的非连续元素

解决问题的一种方法是使用

然后

返回选定元素的线性索引,即向量
[3;5;7]

现在

会产生

matrix =

  -1   1   1
   2   1  -2
   1   3  -3
正如你所料

解释 通过线性索引,
MxN
MATLAB矩阵的元素在长度为
M*N
的平面一维数组中获得连续数字

事实上,返回线性索引是MATLAB函数的默认操作模式

    k = find(X).
正如@bicker在评论中指出的,您可以使用
find(X)
的输出,如中所示

   matrix(find(matrix == 0)) = 1.

但是,如果已经获得了行和列索引向量(也称为下标),则可以使用
sub2ind
函数将它们转换为线性索引。

MATLAB语法提供了几个选项来访问数组中的非连续元素

解决问题的一种方法是使用

然后

返回选定元素的线性索引,即向量
[3;5;7]

现在

会产生

matrix =

  -1   1   1
   2   1  -2
   1   3  -3
正如你所料

解释 通过线性索引,
MxN
MATLAB矩阵的元素在长度为
M*N
的平面一维数组中获得连续数字

事实上,返回线性索引是MATLAB函数的默认操作模式

    k = find(X).
正如@bicker在评论中指出的,您可以使用
find(X)
的输出,如中所示

   matrix(find(matrix == 0)) = 1.

但是,如果您已经获得了行和列索引向量(也称为下标),则可以使用
sub2ind
函数将它们转换为线性索引。

文档。请使用以下原因:这不是您期望的工作方式,因为您没有要求3个元素,您要求的是3行,并且在这3行中,要求的是3列。请参阅文档。使用此方法无法按预期方式工作的原因是,您没有要求3个元素,您要求的是3行,并且在这3行中有3列。为什么不只是
index=find(matrix==0)
?为什么不只是
index=find(matrix==0)
   matrix(find(matrix == 0)) = 1.