我在让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
我尝试的最简单的事情是
for item = x
if item == 4
item = 5;
end
end
我通过查看工作区注意到项目的值确实发生了变化,但x(矩阵)的值保持不变。
如何获取我正在寻找的输出?
答案 0 :(得分:3)
如果您只想将所有4
更改为5
s,那么:
x(x==4)=5
基本上x==4
会在1
中的4
处生成x
的逻辑矩阵:
[0 0 0 1
0 1 1 0
0 1 0 1]
然后我们使用logical index仅影响那些x
所在的1
的值,并将它们全部更改为5
。
如果您想使用循环(我强烈建议您这样做),那么您可以这样做:
for index = 1:numel(x)
if x(index) == 4
x(index) = 5;
end
end
答案 1 :(得分:2)
达到你想要的简短答案:
x(x==4) = 5
回答为什么您的代码没有按预期执行的操作:
您正在将item
更改为5.但该项是新变量,它不会指向矩阵x
中的相同项。因此原始矩阵x
保持不变。