Matlab对数组的逻辑运算

时间:2017-08-06 15:17:44

标签: matlab matrix logical-operators

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

这是我认为应该起作用的一个例子,但我所有类似的尝试都会产生不同的错误,我不知道该怎么做。

Mrelevant = Matrix(Matrix.no_refs > 100)

编辑:Matrix实际上是一个带有标题的表,我想只保留满足某些要求的行,比如标题为'no_refs'的列中的值应该大于100。

我希望这很清楚,谢谢!

2 个答案:

答案 0 :(得分:2)

现在您指定的Matrixtable,答案很明确。您忘记了另外的colon索引参数,以包含您选择的给定行的所有变量:

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

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

答案 1 :(得分:0)

您在此处显示的语法应该有效,但我不知道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),:) = [];

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