MATLAB替换向量中的一些元素

时间:2016-05-06 23:24:01

标签: matlab if-statement vector

如果我有一个向量,可以说L = [10; 10; 10; 11; 11; 13; 13]与另一个向量相关联X = [1; 6; 65; 34; 21; 73; 14我希望用X中的几乎所有元素创建第三个向量Z,但是当L中的元素(i,j)发生变化时,只需要替换X中的0。让我们说我想要的结果应该看起来像Z = [1; 6; 65; 0; 21; 0; 14]

任何想法如何解决这个问题?

我真的很感激:)。

2 个答案:

答案 0 :(得分:1)

这很简单:

X = [1;6;65;34;21;73;14];
L = [10;10;10;11;11;13;13];
Z = X;
ind = [false; diff(L)~=0]; %// logical index of values to be set to 0
Z(ind) = 0;

这可以通过计算发生变更的元素的logical index ind = [false; diff(L)~=0]来实现。需要初始false,因为第一个元素没有先前要比较的元素。逻辑索引用于选择Z的哪些值应设置为0

答案 1 :(得分:0)

这应该有效

Z = zeros(length(L))

for i = 2:length(L)
    if(L(i-1) == L(i)
        Z(i) = X(i);
    else
        Z(i) = 0;
    end
end