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.