如何在MATLAB中检查从一个数组到另一个数组的值范围?

时间:2015-09-27 10:17:39

标签: matlab for-loop comparison

我在MATLAB中有两个数组,说A和B包含如下随机值。阵列A和B都包含一对; 2,4,6或8个或更多元素(仅偶数)和A总是具有比B少的元素。两个数组中的元素都是预先排序的。

A=[152 271];
B=[107 266 314 517 538 732];

我想检查A中所有对的所有对(一对,在这个例子中为152-271)的值的范围,并且如果它超过了B,则扩展/修改B对的值。 B值。在这个例子中,首先将A的对152-271与第一对B(即107-266)进行比较。当152大于107,而271大于266.我们将用271修改第一对B的266个值,以完全包括B中第一对A的范围.A和B中的两个区间(范围)应该在某种程度上重叠以修改B值。当没有要检查的元素时,我们将停止。最终结果将是这样的:

A=[152 271];
B=[107 271 314 517 538 732];

在下面的图像中,绿色,Rad和黄色分别代表A,B和最终B(仅修改)值。 enter image description here

2 个答案:

答案 0 :(得分:0)

您可以使用find选项last来识别B

中的索引
A=[152 271 280 320];
B=[107 266 314 517 538 732];

for interval = 1:numel(A)-1
    %get the index of the lower interval bound in B
    index=find(B<=A(interval),1,'last');
    %increase the upper interval bound if nessecary
    B(index+1)=max(B(index+1),A(interval+1));
end

由于你没有指定任何角落情况(A中的间隔超过B),我没有说明它们。如果它们可能发生,您需要扩展代码。

答案 1 :(得分:0)

A=[152 271];
B=[107 266 314 517 538 732];    
mat=[A B];
A1 = vec2mat(mat,2)
n = size(mat,1);
[t,p] = sort(mat(:));
z = cumsum(accumarray((1:2*n)',2*(p<=n)-1));
z1 = [0;z(1:end-1)];
A2 = [t(z1==0 & z>0),t(z1>0 & z==0)]
% Reference Link: (http://www.mathworks.com/matlabcentral/newsreader/view_thread/171594) by Roger Stafford