【问题标题】:Trying to check if array is always increasing试图检查数组是否总是在增加
【发布时间】:2016-06-17 22:04:19
【问题描述】:

假设我有一个数组A = [ 1 3 4 6 7 8] 和另一个相同大小的数组S = [1 1 0 1 0 1]。

我需要检查整个数组长度的A(i)+S(i) 是否大于或等于A(i-1)+S(i-1)。换句话说,我正在检查 A + S 是否单调递增。

但是,如果S(i-1) 为零,那么我想将A(i)+S(i) 与A(i-2)+S(i-2) 进行比较。

简单来说,我需要检查A+S中的所有元素是否都是单调递增的,忽略S=0的元素。

【问题讨论】:

  • 好的.....那么问题是什么?
  • 一旦diff 变为负数,它就不再增加。使用logical indexing 删除S=0 元素。

标签: arrays matlab sorting


【解决方案1】:

试试这个

isequal(sort(A(S)),A(S)) % or isequal(sort(A(S==1)),A(S==1)) 

或者如果S 不是逻辑矩阵,即可以具有除1 和0 以外的值

idx = S ~= 0;
isequal(sort(A(idx)),A(idx))

Adriaan 的建议应该更快,尤其是在大型矩阵上

all(diff(A(S~=0)) >= 0) % or replace >= with > if you want it to be strictly increasing

【讨论】:

    猜你喜欢
    • 2014-03-26
    • 2011-11-08
    • 1970-01-01
    • 2021-10-10
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    相关资源
    最近更新 更多