【问题标题】:how to take values after a specific point and discard values before it, in MATLAB?如何在 MATLAB 中获取特定点之后的值并丢弃之前的值?
【发布时间】:2010-10-23 14:07:41
【问题描述】:

假设我有一个数组

A =

     1     2     3
     4     5     6
     7     8     9
     2     3     4
     3     4     5
     1     6     8

我从第 3 列取了一个点,假设 p=9。

现在我想要一个新数组,它给我 9 之后的所有值并丢弃 9 之前的值。 例如:

ans =

     7     8     9
     2     3     4
     3     4     5
     1     6     8

我该怎么做?

【问题讨论】:

    标签: matlab vector find


    【解决方案1】:

    这是一种方法:

    >> p = 9;
    >> startrow = find(A(:, 3) == p, 1); % first row where 3rd column entry is p
    >> A1 = A(startrow:end, :)
    
    A1 =
    
         7     8     9
         2     3     4
         3     4     5
         1     6     8
    

    编辑:

    在最后一列中有多个 p 条目,您可以改变 find 的使用方式。例如,如果你想从最后一个 p 而不是第一个开始,你可以运行

    >> startrow = find(A(:, 3) == p, 1, 'last'); % last row where 3rd column entry is p
    

    如果你想要从第一个开始的第二个,你需要做更多的工作:

    >> startrows = find(A(:, 3) == p, 2); % first two rows where 3rd column entry is p
    >> startrow = startrows(end); % Just the second row where 3rd column entry is p
    

    此外,如果 p 有可能从未出现在数组中,或者至少没有出现两次(对于最后一个示例),您可能需要进行错误检查。

    【讨论】:

    • 如果矩阵是这样的 A=[1 2 3;4 5 6;7 8 9;2 3 9;3 4 9;1 6 8] i-e 第三列包含 9 三次并且 i想要选择第 5 行,其中有 9 是 3 4 9.......如何选择它?
    • 您可以将查找结果输出到向量startrow=find(A(:,3)==p);,然后使用您想要的任何索引:A1=A(startrow(2):end,:);
    • 如果我想在点 i-e p=9 之后丢弃值并希望保留此点之前的值....比做什么?
    【解决方案2】:

    如果你知道要点来自哪一列,你可以简单地做

    B = A(n:end,:)
    

    其中 n 是列号。

    【讨论】:

      【解决方案3】:

      另一种选择是直接从原始矩阵中删除行:

      A(1:startrow-1,:)=[];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-08
        • 2018-06-20
        • 2015-04-17
        • 2020-09-11
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        相关资源
        最近更新 更多