【问题标题】:MATLAB replacing some elements from a vectorMATLAB 替换向量中的一些元素
【发布时间】:2016-05-06 23:24:01
【问题描述】:
如果我有一个向量,假设 L=[10;10;10;11;11;13;13] 与另一个向量 X=[1;6;65;34;21;73;14 ] 我想创建第三个向量 Z,其中几乎包含 X 中的所有元素,但是当 L 中的元素 (i,j) 发生变化时,只需替换 X 中的 0。假设我想要的结果应该是这样 Z=[1;6;65;0;21;0;14]
有什么办法解决这个问题吗?
我真的很感激:)
【问题讨论】:
标签:
matlab
if-statement
vector
【解决方案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 indexind = [false; diff(L)~=0] 来工作。最初的false 是必需的,因为第一个元素没有前一个元素可以比较。逻辑索引用于选择应将Z 的哪些值设置为0。
【解决方案2】:
这应该可以工作
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