如何更新矩阵中行的值
How to update values from rows on a matrix
我有一个矩阵:6 行 x 18 列
我想问用户他想将哪一行更改为 0 并实现它,但是如果他输入 0 它只是退出程序
row = input('Input 0 to exit\n\n Row to eliminate:', 's');
if row ~= 0
M(row,:) = 0;
disp(M)
end
我想将整个输入行更改为 0,但它以某种方式在原始矩阵下方创建了 44 行(全部为 0)并且不更改前 6 行(原始矩阵)
row
是一个字符向量,不是数字。例如,如果您键入“4”,则变量包含字符 4,其数值为 52(ASCII 代码)。使用它来索引将创建一个行 #52 并用零填充它。要制作该行,还需要制作中间行,其值默认为 0。
要解决此问题,请从对 input
的调用中删除 's'
。这将导致 return 值被解释为 MATLAB 表达式,而不是直接 return 将输入的文本作为字符向量。
但是,如果您的程序有可能被恶意用户或愚蠢的用户使用,则此解决方案很危险(如 所示),因为它会评估用户键入的任何内容,这意味着用户可以,例如输入擦除硬盘驱动器的命令。
更安全的解决方案是使用str2double
将input
的字符数组输出转换为可用于索引的数字。
我有一个矩阵:6 行 x 18 列 我想问用户他想将哪一行更改为 0 并实现它,但是如果他输入 0 它只是退出程序
row = input('Input 0 to exit\n\n Row to eliminate:', 's');
if row ~= 0
M(row,:) = 0;
disp(M)
end
我想将整个输入行更改为 0,但它以某种方式在原始矩阵下方创建了 44 行(全部为 0)并且不更改前 6 行(原始矩阵)
row
是一个字符向量,不是数字。例如,如果您键入“4”,则变量包含字符 4,其数值为 52(ASCII 代码)。使用它来索引将创建一个行 #52 并用零填充它。要制作该行,还需要制作中间行,其值默认为 0。
要解决此问题,请从对 input
的调用中删除 's'
。这将导致 return 值被解释为 MATLAB 表达式,而不是直接 return 将输入的文本作为字符向量。
但是,如果您的程序有可能被恶意用户或愚蠢的用户使用,则此解决方案很危险(如
更安全的解决方案是使用str2double
将input
的字符数组输出转换为可用于索引的数字。