【问题标题】:Deleting matrix elements efficiently高效删除矩阵元素
【发布时间】:2011-03-09 16:32:06
【问题描述】:

我想有效地从维度为 2*n 的矩阵的开头删除大量数据。矩阵如下所示:

x1 x2
x3 x4
...
...

我想删除行的第一个元素小于某个数字的所有行,并在行不小于时停止(元素按数字顺序排列)

我现在做的很慢:

while 1 
   if list{i}(1) <= someNumber
      list{i}(1,:) = []
   else
      break;
   end
end

在 MATLAB 中一定有一种简洁的方法可以快速完成这项工作吗?

谢谢。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    一种方法是一次性比较整个第一列然后删除,即

    rows2delete = list{i}(:,1) <= someNumber; %# creates logical array with 1 for deletion
    list{i}(rows2delete,:) = []; %# delete some rows, all corresponding cols
    

    【讨论】:

    • 真棒乔纳斯,这就是我所需要的。我知道一定有一个好方法可以让 MatLab 做到这一点,但它不是我的语言之一 :)。将在最短时间过去后接受。谢谢..这节省了很多时间。
    • @vivid-colours:顺便说一句,如果您需要对列表中的所有单元格执行此操作,您可以使用 cellfun 进行单行:list = cellfun(@(x)x(x(:,1)&gt;someNumber,:),list,'uniformOutput',false)。对于list 中的每个数组,这会保留第一个值大于someNumber 的行。
    • 感谢您的帮助.. 真的帮助了我。我刚刚发布了一个您可能感兴趣的类似问题。我需要学习如何在 MATLAB 中更好地完成这些事情。
    猜你喜欢
    • 2014-09-21
    • 2012-02-13
    • 2014-10-24
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 2021-04-16
    相关资源
    最近更新 更多