Rename the indices of a vector in a certain way.

3 Ansichten (letzte 30 Tage)
LH
LH am 4 Jul. 2024
Kommentiert: Stephen23 am 4 Jul. 2024
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.

Akzeptierte Antwort

Garmit Pant
Garmit Pant am 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 Kommentare
LH
LH am 4 Jul. 2024
That's great! Many thanks Garmit!
Stephen23
Stephen23 am 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>

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Community Treasure Hunt

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

Start Hunting!

Translated by