Indices of 2D array

5 visualizaciones (últimos 30 días)
Mohammad Torabi
Mohammad Torabi el 4 de Nov. de 2020
Editada: Mohammad Torabi el 5 de Nov. de 2020
I have a 1D (very big one) array like below:
data =[ 2 5 0 15 12 7 4 8 19 14 20 25 18 13 40 ];
I want to make the lowest value to zero in every 3 element. I firstly reshaped it to be like:
reshaped_data =
2 15 4 14 18
5 12 8 20 13
0 7 19 25 40
And then sorted each column and now I have the indices of the sorted data as below.
sorted_data_index =
2 1 3 3 3
1 2 2 2 1
3 3 1 1 2
So, please let me know how can I use sorted_data_index as indices of reshaped_data to be able to make the lowest values zero?
I can do this within a for loop, but it would be very slow.
Thanks

Respuesta aceptada

Sindar
Sindar el 5 de Nov. de 2020
data =[ 2 5 0 15 12 7 4 8 19 14 20 25 18 13 40 ];
reshaped_data = reshape(data,3,[]);
[~,idx]=sort(reshaped_data,1,'descend');
reshaped_data( sub2ind( size(reshaped_data), idx(3,:), 1:size(reshaped_data,2)) ) = 0
reshaped_data =
2 15 0 0 18
5 12 8 20 0
0 0 19 25 40
  1 comentario
Mohammad Torabi
Mohammad Torabi el 5 de Nov. de 2020
Editada: Mohammad Torabi el 5 de Nov. de 2020
Thanks for your help

Iniciar sesión para comentar.

Más respuestas (1)

Luna
Luna el 5 de Nov. de 2020
try this:
data =[ 2 5 0 15 12 7 4 8 19 14 20 25 18 13 40 ];
reshaped_data = reshape(data,3,length(data)/3);
[min_vals,idx] = min(reshaped_data);
idx_increment = 0:3:length(data)-3;
element_number_in_matrix = idx + idx_increment;
reshaped_data(element_number_in_matrix) = 0;
new_data = reshape(reshaped_data,1,length(data));
  1 comentario
Mohammad Torabi
Mohammad Torabi el 5 de Nov. de 2020
Editada: Mohammad Torabi el 5 de Nov. de 2020
Thanks for your help

Iniciar sesión para comentar.

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by