【问题标题】:Matlab logical operation on arrayMatlab对数组的逻辑运算
【发布时间】:2018-01-13 23:10:03
【问题描述】:

我的问题应该很简单,但我无法让它发挥作用。 我想通过使用逻辑运算符仅从矩阵中获取相关行,然后仅存储这些行。 我习惯于在其他语言中使用 for 循环来执行此操作,但在 Matlab 中,一次在整个数组或矩阵上运行它应该更快。

这是我认为应该可行的示例,但我所有类似的尝试都会产生不同的错误,我不知道该怎么做。

Mrelevant = Matrix(Matrix.no_refs > 100)

编辑:矩阵实际上是一个带有标题的表,我只想保留满足某些要求的行,例如标题为“no_refs”的列中的值应该高于 100。

我希望这足够清楚,谢谢!

【问题讨论】:

标签: matlab matrix logical-operators


【解决方案1】:

既然您指定Matrixtable,答案就很明确了。您忘记了一个额外的 colon 索引参数来包含您选择的给定行的所有变量:

Mrelevant = Matrix(Matrix.no_refs > 100, :);

这将为您提供一个新表 Mrelevant,其中仅包含来自 Matrix 的那些行,其中 no_refs 变量大于 100。有关访问 table 中数据的所有方法,请参阅 here按行和/或变量。

【讨论】:

    【解决方案2】:

    您在此处显示的语法应该可以工作,尽管我不知道no_refs 的用途可能是什么。正确的语法是:

    Mrelevant = matrixName(matrixName > 100)
    

    但是,这将创建一个包含满足条件的值的列。例如,

    testMatrix =
    0.8147    0.0975    0.1576    0.1419    0.6557
    0.9058    0.2785    0.9706    0.4218    0.0357
    0.1270    0.5469    0.9572    0.9157    0.8491
    0.9134    0.9575    0.4854    0.7922    0.9340
    0.6324    0.9649    0.8003    0.9595    0.6787
    
    relevant = testMatrix(testMatrix > .5)
    
    relevant =
    0.8147
    0.9058
    0.9134
    0.6324
    0.5469
    0.9575
    0.9649
    0.9706
    0.9572
    0.8003
    0.9157
    0.7922
    0.9595
    0.6557
    0.8491
    0.9340
    0.6787
    

    但是,当你说

    仅使用逻辑运算符然后存储相关行 那些行

    你的意思是只存储行中所有元素都满足条件的行吗?在这种情况下,语法将是

     relevant = testMatrix
     % Delete all rows that don't meet the requirement
     relevant(any(relevant<=100, 2),:) = [];
    

    这将简单地删除任何包含不符合您要求的值的行。

    【讨论】:

    • 我收到 矩阵索引超出删除范围。 任何线索为什么会这样?
    • 可能是因为特定矩阵的形成不正确。如果您可以将命令行或脚本发布到发生错误的位置,我可以帮助进一步调试它。
    猜你喜欢
    • 2012-02-15
    • 2016-10-21
    • 2019-08-12
    • 2014-11-05
    • 2021-03-05
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多