Rename the indices of a vector in a certain way.

3 views (last 30 days)
Hi all,
My code below has a vector A and its index vector idx. It goes throguh the elements of A and when it finds a zero element, it removes its index from the orginal index vector.
My problem here is: suppose the updated index vector is . How can I rename this vector so it increases in an acending order? For example: the first element in the updated index vector is 1, I want this to be 1, the second element in the updated index vector is 3, I want this to become 2, and so on so forth.
%define the index vector
idx = [1 2 3 4 5];
%define the vector
A = [5 0 6 0 3];
%initialise the vector that has all indices of zero elements
zero_indices = [];
%go through the elements of vector A
for uu = 1:numel(A)
%if the element is zero
if A(uu)==0
%assign its index to the zero-elements index vector
zeroindex = uu;
%collect all results from iterations
zero_indices = [zero_indices ; zeroindex];
end
end
%update the original index vector by removing the indicies that correspond
%to zero elements
idx(zero_indices) = [];
%rename the indices os that they beocome 1, 2, 3, ...
Any help would be appreicted.
Thanks.

Accepted Answer

Garmit Pant
Garmit Pant on 4 Jul 2024
Hello LH
Given that you have extracted the indices of non-zero elements in the vector ‘A’, you can rename the index vector to have ascending values using the following code-snippet:
% Given non-zero value indices are [1 3 5]
idx = [1 3 5];
% Rename the indices so that they become 1, 2, 3, ...
new_idx = 1:numel(idx);
% Display the updated index vector
disp('Updated index vector:');
Updated index vector:
disp(new_idx);
1 2 3
I hope you find the above explanation and suggestions useful!
  4 Comments
Stephen23
Stephen23 on 4 Jul 2024
The simpler MATLAB approaches:
idx = [1,3,3,5,1,5,3,1]
idx = 1x8
1 3 3 5 1 5 3 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
[~,~,idy] = unique(idx)
idy = 8x1
1 2 2 3 1 3 2 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
idy = discretize(idx,[unique(idx),Inf])
idy = 1x8
1 2 2 3 1 3 2 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!