Borrar filtros
Borrar filtros

Help needed with matrix in for-loop and output of matrix

1 visualización (últimos 30 días)
Karsten el 23 de Dic. de 2014
Comentada: Karsten el 24 de Dic. de 2014
Hi, i have a question regarding some tasks to change the content of a matrix. The goal of this operation is to 'clear' a matrix consisting out of 2 columns and a random amount of rows. The operation has to be done using a function-file. The input has to be x = [:,1] and y = [:,2]. After that the first step is to put them together in a matrix A = [x,y] and the rows need to be sorted from lowest to highest value from the first column, B = sortrows(A,1). The problem however is that in the first column the x-values are supposed to be unique with it's matching y-values (2nd column).
So let's say you got a x = [1;3;4;3;2;2;4] and y = [5;1;3;2;9;6;1] which will then transfer into the matrix B = [1,5;2,9;2,6;3,1;3,2;4,3;4,1]. Now as you can see there are several x-values that aren't unique in the first column. The result of this operation should be the next matrix C = [1,5;2,6;3,1;4,1].
  1. If an x-value is unique, then it's y-value is the one to be taking.
  2. If an x-value is not unique, then the y-value should be the lowest value matching with these x-values.
How can i write a code into a for-loop(?) with these 2 conditions so it can be used for any matrix with n x 2 dimension? This is what i had so far, yet i have no idea if this is anywhere near the solution..
function [ new_matrix ] = matrix( x,y )
A = [x,y];
B = sortrows(A,1);
n = size(B,1);
for i = 1:1:n
if B(i,1) == B(i+1,1) && B(i,2) <= B(i+1,2)
B(i+1,:) = [];
elseif B(i,1) == B(i+1,1) && B(i,2) >= B(i+1,2)
B(i,:) = [];
This is an example of how it's supposed to work, but for any matrix with n x 2 dimensions.

Respuesta aceptada

Sara el 23 de Dic. de 2014
With x,y column vectors:
A = [x,y];
B = sortrows(A,1);
unique_x = unique(B(:,1));
new_matrix = zeros(numel(unique_x),2);
new_matrix(:,1) = unique_x;
for i = 1:numel(unique_x)
k = find(B(:,1) == unique_x(i));
new_matrix(i,2) = min(B(k,2));
  1 comentario
Karsten el 24 de Dic. de 2014
Well that doe seem to work! Thanks alot Sara, much appreciated!

Iniciar sesión para comentar.

Más respuestas (0)


Más información sobre Language Fundamentals en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by