【问题标题】:Fastest way to choose a matrix row given a certain condition给定条件下选择矩阵行的最快方法
【发布时间】:2017-04-15 19:19:38
【问题描述】:

在 Matlab 中,我有一个 2x3 矩阵 A,如下所示:

A = [1 2 3; 4 5 6];

这个矩阵是在一个接受参数T的函数内部定义的。我需要处理两种情况:

  1. T
  2. T >= 10

如果用户输入,比如说,T=40,那么应该选择 A 的第二行来进行计算。另一方面,如果说 T=5,则应选择 A 的第一行。

我可以这样写一个简单的 if-else 条件:

if (T<10)
    b = A(1,:) * ... %Do whatever with the first row
else
    b = A(2,:) * ... %Do whatever with the second row
end

但是我想知道是否可以使用 Matlab 索引来节省自己必须在我的代码周围编写这个 if-else 条件的开销(这个条件必须在我程序的不同部分检查多次)。

例如,我希望达到像A(T&lt;10, :) 这样的简单表达式,如果 T=10 会返回空矩阵。

我已经绞尽脑汁好几个小时了,但在优化 Matlab 脚本方面我还是个新手。谁能把我踢到正确的方向?

【问题讨论】:

  • 如果你的目标只是减少重复的 if-else 块,你可以先定义一个变量rowSelector。然后在你的函数的开始你可以设置rowSelector 只用一个 if-else 块然后做A(rowSelectr,:)
  • 嗯,真的@jrook。你知道 Matlab 是否承认 rowSelectr = T
  • 我不这么认为。您可以使用this answer 作为解决方法。在任何情况下,函数顶部的单个 if-else 块都无需担心,它比任何 聪明 解决方案更有效,每次您想选择一行时都会计算该行。
  • 我明白了,谢谢你的时间。

标签: matlab


【解决方案1】:

您可以使用以下方法:

A((T>=10) + 1, :)

【讨论】:

    猜你喜欢
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多