【问题标题】:How do I put a condition into a specific column for matlab?如何将条件放入 matlab 的特定列中?
【发布时间】:2018-08-18 21:18:45
【问题描述】:

想在这里查看我可以使用哪种代码在 matlab 的特定列上创建特定条件。所以情况就是这样,我有一个文本文件(见图),

其中包含四列值。这是matlab的代码,如下所示

fileID = fopen('test1.txt');
A = dlmread('test1.txt')
B = A>1000
fclose(fileID);

所以根据这行代码,我已经导入了文件并将它们放在矩阵 A 中。随后我为矩阵 B 设置了一个条件,即 A 的值必须大于 1000。使用它,我能够得到'0'和'1'的回报,这就是我想要的。现在,我想创建一组条件,以便如果任何行中的第 1、2 和 3 列等于 1,我将能够在该行中显示/打印显示“Powergrip”的输出。除了这种情况,是否应该在任何行中 1,2 等于 1,该行会显示“precisiongrip”?我确实相信这与一系列 if else 条件有关,但我不确定如何编写这些条件。请原谅我糟糕的编码能力,因为我对此很陌生。谢谢!

【问题讨论】:

    标签: matlab conditional-statements


    【解决方案1】:

    首先,使用dlmread()时不需要fopen()fclose()函数,只需要单独使用即可(只有在使用fread()等其他函数时才需要它们)。

    您可以使用all() 函数查找在所有列(或行)中具有 1 的行(或列)。要查找所有列中包含 1 的行,请执行以下操作:

    C = all(B, 2); % The "2" means work across columns.
    

    要查找第 1、2 和 3 列中有 1 的情况,只需传入这三列:

    C = all(B(:,[1,2,3]), 2); % PowerGrip
    

    或对于第 1,2 列:

    D = all(B(:,[1,2]), 2);   % PrecisionGrip
    

    要创建一个描述数组,您需要一个字符串元胞数组。有很多方法可以生成它,这里有一个简单的例子:

    E = cell( size(C) ); % Make a cell array to hold strings, same size as C
    E(:) = {'none'};     % Fill all rows with "none" to start. Could use repmat() to create E...
    E(C) = {'PowerGrip'}; 
    E( D & not(C) ) = {'PrecisionGrip'};
    

    使用table 可能最容易在数字之外显示单词 PowerGrip 和 PrecisionGrip(尽管您可以通过多种方式实现)。例如:

    T = array2table(A)
    T.Desc = E         % Add a column of descriptions...
    

    【讨论】:

    • 如果我想要第 1,2 和 4 列大于 0 的条件怎么办?可以这样写吗?
    • 我已经找到了使用您的代码的方法,谢谢! F = all(B(:,[1,2,4]), 2);
    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2017-09-22
    • 2019-01-16
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2015-07-16
    相关资源
    最近更新 更多