Mask with a for loop

조회 수: 2 (최근 30일)
Alexya
Alexya 2023년 3월 7일
편집: Matt J 2023년 3월 7일
I wrote this code that is finding the data i want to remove, i dont know how to mask to remove it from the original vector
vec = [2 3 0 0 7 8 0]
the answer is supposed to be [2 0 0 7 0]
but im getting [3 8], the opposite of what I want, how do i mask to flip this
function [newVec] = removeData(vec)
newVec = [];
for x = 1:length(vec) %don't have to go backwards because we aren't deleting
if vec(x) ~= 0 && vec(x + 1) == 0%checking for not evens
newVec = [newVec vec(x)];
end
end
end

답변 (3개)

David Hill
David Hill 2023년 3월 7일
removeData([2 3 0 0 7 8 0])
ans = 1×5
2 0 0 7 0
function [newVec] = removeData(vec)
newVec = zeros(size(vec));
for x = 1:length(vec) %don't have to go backwards because we aren't deleting
if vec(x) ~= 0 && vec(x + 1) == 0%checking for not evens
newVec(x)=1;
end
end
newVec=vec(~newVec);
end

Matt J
Matt J 2023년 3월 7일
편집: Matt J 2023년 3월 7일
removeData([2 3 0 0 7 8 0])
ans = 1×5
2 0 0 7 0
function newVec = removeData(vec)
newVec = vec;
newVec( vec(1:end-1) & ~vec(2:end) ) = [];
end

Voss
Voss 2023년 3월 7일
removeData([2 3 0 0 7 8 0])
ans = 1×5
2 0 0 7 0
function vec = removeData(vec)
x = 1;
while x < numel(vec)
if vec(x) ~= 0 && vec(x + 1) == 0%checking for not evens
vec(x) = [];
else
x = x + 1;
end
end
end

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by