在特定位置添加和删除矢量元素

时间:2016-06-14 17:55:08

标签: matlab vector

X = [1, 2, 3, 4, 5]Y = [1, 2, 1, 0, 1]成为X映射到Y的向量。 现在,我想确定Y的最大值和最小值,这很简单:[value_min, id_min] = min(Y) = [0, 4][value_max, id_max] = max(Y) = [2, 2]。 然后,我想删除与X中的最小值相对应的Y元素,并在X中对应Y中的最大值的元素展开,同时保留数字分数相等。对于此示例,我们删除了X(4)=[]。然后我们展开X(2)=(X(2) - X(1))/2X(3)=(X(3) - X(2))/2,使X看起来像X = [1, 1.5, 2.5, 3, 5]。我怎样才能做到这一点?我认为有一个普遍的问题。

解决方案

现在,以下剪辑应适用于任何长度为N的向量。请注意,第一个和最后一个元素是固定的。

[value_max, id_max] = max(Y(2:N-1));
X(id_max) = (X(id_max) - X(id_max-1))/2;
X(id_max+1) = (X(id_max+1) - X(id_max))/2;
[value_min, id_min] = min(Y(2:N-1));
X(id_min)=[];

1 个答案:

答案 0 :(得分:0)

以下是您的问题的解决方案,但您应该注意一些事项

% Any Vector should work
X=[1 2 3 4 5];
Y=[1 2 1 0 1];

%We dont need the actual min max
[~,MIN]=min(Y(2:end-1)); 
[~,MAX]=max(Y(2:end-1));
%you dont look at the first element so the index has to be increased by 1
MIN=MIN+1; 
MAX=MAX+1;

X(MIN)=[];%taking out the smallest element
Xnew= [X(1:MAX) X(MAX:end)]; %Extend the vector by taking the MAX value twice
%the mean for 2 elements is A+B/2
Xnew(MAX)=mean(Xnew(MAX-1:MAX)); %the left one and the element next to it
Xnew(MAX+1)=mean(Xnew(MAX+1:MAX+2)); %the right one and the element next ot it

%rewrite X and clear Xnew
X=Xnew;
clear Xnew;
  • 首先,这不是非常有效,但如果它只是习惯了 修改一些向量而不是每天被调用一百万次 做的伎俩。
  • 在你的文字中,你说删除最小值然后拉伸 在最大值附近,在您的解决方案元代码中,它是另一种方式 周围。当最小值和最大值接近时,这将影响结果 彼此,所以请检查你喜欢哪种方式。
  • Y根本没有改变,所以它不能在同一个载体上多次执行。
  • 以后是否有任何重要的N(长度)?如果不是,你总是可以参考"结束"