好吧,我想更改零元素,例如,(它们是零不是重点)我正在使用此代码,但是当我转到子集时它不会很好。< / p>
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,而不仅仅是零元素。
答案 0 :(得分:3)
MATLAB语法提供了几种访问数组中非连续元素的选项。
解决问题的一种方法是使用linear indexing。
让
matrix = [ -1 1 0; 2 0 -2; 0 3 -3]
和
[rows,cols] = find(matrix == 0).
然后
sub2ind(size(matrix),rows,cols)
返回所选元素的线性索引,即向量[3;5;7]
。
现在
matrix(sub2ind(size(matrix),rows,cols)) = 1
会产生
matrix =
-1 1 1
2 1 -2
1 3 -3
正如您所期望的那样。
使用线性索引,MxN
MATLAB矩阵的元素在长度为M * N
的平面1维数组中得到连续数。
实际上,返回线性索引是MATLAB函数的默认操作模式
k = find(X).
正如@beaker在评论中指出的那样,你可以使用find(X)
的输出,如
matrix(find(matrix == 0)) = 1.
但是,如果您已经获得了行和列索引的向量(也称为下标),则可以使用sub2ind
函数将它们转换为线性索引。