在MATLAB中用逻辑索引求局部极大值
我以前在MATLAB向量中使用过逻辑索引,例如在MATLAB中用逻辑索引求局部极大值,matlab,matrix-indexing,Matlab,Matrix Indexing,我以前在MATLAB向量中使用过逻辑索引,例如 X = X(X < 6); 我知道这在向量的第一个和最后一个元素中不起作用,并且有更好的方法找到局部极值 这个问题与前一个问题()不同,因为我对寻找最大值不是特别感兴趣,而是能够使用逻辑索引和“局部”条件来引用向量中的相邻元素 您不能像您描述的那样直接执行此操作。您必须创建额外的数据,这些数据本身可以进行逻辑测试,其输出可以用于索引到向量中。在您的例子中,最好的方法是计算一个近似导数,并找到该导数的向下零交点 x = rand(1,50);
X = X(X < 6);
我知道这在向量的第一个和最后一个元素中不起作用,并且有更好的方法找到局部极值
这个问题与前一个问题()不同,因为我对寻找最大值不是特别感兴趣,而是能够使用逻辑索引和“局部”条件来引用向量中的相邻元素 您不能像您描述的那样直接执行此操作。您必须创建额外的数据,这些数据本身可以进行逻辑测试,其输出可以用于索引到向量中。在您的例子中,最好的方法是计算一个近似导数,并找到该导数的向下零交点
x = rand(1,50);
xDiff = diff(x);
xZeroCross = diff(sign(xDiff));
indexUp = find(xZeroCross>0)+1;
indexDown = find(xZeroCross<0)+1;
figure();
plot(1:50,x,'r',indexDown,x(indexDown),'b*',indexUp,x(indexUp),'go');
x=rand(1,50);
xDiff=diff(x);
xZeroCross=diff(符号(xDiff));
indexUp=find(xZeroCross>0)+1;
indexDown=find(xZeroCross您不能像您描述的那样直接执行此操作。您必须创建额外的数据,这些数据本身可以进行逻辑测试,其输出可以用于索引到向量中。在您的情况下,最好的方法是计算近似导数,并找到该导数的向下零交叉
x = rand(1,50);
xDiff = diff(x);
xZeroCross = diff(sign(xDiff));
indexUp = find(xZeroCross>0)+1;
indexDown = find(xZeroCross<0)+1;
figure();
plot(1:50,x,'r',indexDown,x(indexDown),'b*',indexUp,x(indexUp),'go');
x=rand(1,50);
xDiff=diff(x);
xZeroCross=diff(符号(xDiff));
indexUp=find(xZeroCross>0)+1;
indexDown=find(XZeroCross向我们显示最小样本输入数据和预期输出?我认为,如果没有某种循环,仅使用逻辑索引是不可能的。对于相对简单的约束或条件,可以使用ordfilt2
或findpeaks
。请参阅。向我们显示最小样本输入数据和预期输出?我不认为这是我的想法仅使用逻辑索引而不使用某种循环是可能的。有关相对简单的约束或条件,可以使用ordfilt2
或findpeaks
。请参阅。