Matlab对数组的逻辑运算

Matlab logical operation on array

我的问题应该很简单,但我做不出来。 我想通过使用逻辑运算符仅从矩阵中获取相关行,然后仅存储这些行。 我习惯在其他语言中使用 for-loop 来执行此操作,但在 Matlab 中,一次对整个数组或矩阵执行 运行 应该会更快。

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

Mrelevant = Matrix(Matrix.no_refs > 100)

编辑:矩阵实际上是一个 table 和 headers,我只想保留满足某些要求的行,比如 header 'no_refs' 应该在 100 以上。

我希望这已经够清楚了,谢谢!

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

然而,当你说

only the relevant rows by using logical operators and then storing those rows

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

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

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

现在您指定 Matrix 是一个 table, the answer is clear. You forgot an additional colon 索引参数,以包含您正在选择的给定行的所有变量:

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

这将为您提供一个新的 table Mrelevant,其中仅包含 Matrixno_refs 变量大于 100 的那些行。参见 here 用于访问 table 行 and/or 变量中数据的所有方法。