在matlab中用for循环改变矩阵元素

在matlab中用for循环改变矩阵元素,matlab,loops,for-loop,matrix,Matlab,Loops,For Loop,Matrix,我在让MATLAB做我想做的事情时遇到了一些问题 假设我有一个矩阵x=[1 2 3 4;1 4 4 5;6 4 1 4] 我正在尝试编写代码,将遍历矩阵并将每个4更改为5,因此它会修改输入矩阵 我试过几件事: while index <= numel(x) if index == 4 index = 5; end index = index + 1; end for item = x if item == 4 item =

我在让MATLAB做我想做的事情时遇到了一些问题

假设我有一个矩阵
x=[1 2 3 4;1 4 4 5;6 4 1 4]

我正在尝试编写代码,将遍历矩阵并将每个4更改为5,因此它会修改输入矩阵

我试过几件事:

while index <= numel(x)
    if index == 4
        index = 5;
    end
    index = index + 1;
end


for item = x
    if item == 4
        item = 5;
    end
end
通过查看工作区,我注意到item的值确实发生了变化,但x(矩阵)的值保持不变


如何获得所需的输出?

简短回答以实现您的目标:

x(x==4) = 5
回答代码没有达到预期效果的原因:
您正在将
更改为5。但该项是一个新变量,它不指向矩阵中的同一项
x
。因此,原始矩阵
x
保持不变。

如果您只想将所有
4
s更改为
5
s,则:

x(x==4)=5
基本上,
x==4
将在
x
中有
4
的地方产生一个逻辑矩阵
1
s:

[0 0 0 1
 0 1 1 0
 0 1 0 1]
然后,我们使用仅影响
x
的值,其中
1
s是,并将它们全部更改为
5
s

如果您想使用循环(我强烈建议您不要这样做),那么您可以这样做:

for index = 1:numel(x)
    if x(index) == 4
        x(index) = 5;
    end
end

+感谢你展示你所做的尝试。不知道答案是可以的。不尝试,但不是!除此之外,我强烈建议您遵循Dan的建议,避免为此循环。
for index = 1:numel(x)
    if x(index) == 4
        x(index) = 5;
    end
end