我在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];
答案 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