How to remove the number 0 between index1 & index2 ?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Smithy
am 25 Jan. 2022
Bearbeitet: DGM
am 25 Jan. 2022
I would like to remove the number 0 between index1 & index2.
How can I remove it....
The result I want is A = [0 0 0 1 1 1 1 2 2 1 1 1 0 0 0];
clear all; clc; close all;
A = [0 0 0 1 1 1 1 0 0 0 2 2 1 0 0 0 1 1 0 0 0];
index1 = find(A > 0,1,'first');
index2 = find(A > 0,1,'last');
ind3 = find(A==0);
A(index1<ind3 & ind3<index2) = []; % It provides me the wrong output.
0 Kommentare
Akzeptierte Antwort
Alberto Cuadra Lara
am 25 Jan. 2022
Hi Seungkuk,
There you have it. The tricky thing here is that you have to create a vector of the same length as your input, whose values are zero or one if it satisfies both conditions or not, respectively.
% Inputs
A0 = [0 0 0 1 1 1 1 0 0 0 2 2 1 0 0 0 1 1 0 0 0];
ind_1 = 4;
ind_2 = length(A0) - 4;
loc_value = 0;
% Constants
A = A0;
N = length(A);
% Set range
range = ind_1:ind_2;
% Set condition
cond_1 = A == loc_value;
cond_2 = zeros(1, N);
for i = 1:N
if i >= ind_1 && i <= ind_2
cond_2(i) = 1; % Is in range
end
end
% Remove loc_value from index_1 to index_2
A(cond_1 & cond_2) = [];
% Result
A
% Check
sol = [0 0 0 1 1 1 1 2 2 1 1 1 0 0 0];
isequal(A, sol)
0 Kommentare
Weitere Antworten (1)
DGM
am 25 Jan. 2022
Bearbeitet: DGM
am 25 Jan. 2022
Assuming that you're only concerned with zeros between 1 or 2, and that all values are single-digit numbers, here's one way:
A = [0 0 0 1 1 1 1 0 0 0 2 2 1 0 0 0 1 1 0 0 0];
B = regexprep(char(A+'0'),'(?<=[1|2])0+(?=[1|2])','')-'0'
If you want any nonzero digits to be considered:
A = [0 0 0 1 1 1 3 0 0 0 2 2 1 0 0 0 9 1 0 0 0];
B = regexprep(char(A+'0'),'(?<=[1-9])0+(?=[1-9])','')-'0'
If the numbers aren't single-digit and you want to get rid of zeros between any nonzero numbers, this is a different way:
idx1 = find(A ~= 0,1,'first');
idx2 = find(A ~= 0,1,'last');
D = A(idx1:idx2);
D = [max(A(1:idx1-1),0) D(D~=0) min(A(idx2+1:end),numel(A))]
0 Kommentare
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!