How to remove the number 0 between index1 & index2 ?

1 ビュー (過去 30 日間)
Smithy
Smithy 2022 年 1 月 25 日
編集済み: DGM 2022 年 1 月 25 日
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.

採用された回答

Alberto Cuadra Lara
Alberto Cuadra Lara 2022 年 1 月 25 日
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
A = 1×15
0 0 0 1 1 1 1 2 2 1 1 1 0 0 0
% Check
sol = [0 0 0 1 1 1 1 2 2 1 1 1 0 0 0];
isequal(A, sol)
ans = logical
1

その他の回答 (1 件)

DGM
DGM 2022 年 1 月 25 日
編集済み: DGM 2022 年 1 月 25 日
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'
B = 1×15
0 0 0 1 1 1 1 2 2 1 1 1 0 0 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'
B = 1×15
0 0 0 1 1 1 3 2 2 1 9 1 0 0 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))]
D = 1×15
0 0 0 1 1 1 3 2 2 1 9 1 0 0 0

カテゴリ

Find more on Matrices and Arrays in Help Center and File Exchange

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by