【问题标题】:Find the middle value in array that meets condition在数组中找到满足条件的中间值
【发布时间】:2020-05-11 03:43:11
【问题描述】:

我有逻辑数组(零和一)1500x700

我想在每一列中找到“1”,当列中有多个“1”时,我应该选择中间的。

这样可以吗?我知道如何找到“1”,但如果一列中有两个“1”,我不知道如何提取中间的“1”。

【问题讨论】:

    标签: arrays matlab indexing find logic


    【解决方案1】:

    find 函数返回您的索引。

    >> example=[1,0,0,1,0,1,1];
    >> indices=find(example)
    
    indices =
    
         1     4     6     7
    
    >> indices(floor(numel(indices)/2))
    
    ans =
    
         4
    

    对每一列执行此操作,您就有了解决方案。

    【讨论】:

      【解决方案2】:

      你可以

      1. 获取find的行和列索引;
      2. 使用自定义函数应用accumarray 以获取每列的中间行索引。

      x = [1 0 0 0 0; 0 0 1 0 0; 1 0 1 0 0; 1 0 0 1 0];                      % example
      [ii, jj] = find(x);                                                    % step 1
      result = accumarray(jj, ii, [size(x,2) 1], @(x) x(ceil(end/2)), NaN);  % step 2
      

      注意:

      • 对于偶数个,这给出了两个中间索引的第一个。如果您更喜欢两个中间索引的平均值,请将 @(x) x(ceil(end/2)) 替换为 @median。
      • 对于 没有列 的列,结果为 NaN。如果您更喜欢不同的值,请将 accumarray 的输入第五个参数替换为该值。

      例子:

      x =
           1     0     0     0     0
           0     0     1     0     0
           1     0     1     0     0
           1     0     0     1     0
      
      result =
           3
         NaN
           2
           4
         NaN
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 2012-01-14
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 2020-12-21
        相关资源
        最近更新 更多