Size mismatch error when trying to find a row in an array that is the same as a variable vector.

2 visualizaciones (últimos 30 días)
idx = find(all(waypoints == target, 2), 1);
So this is a line of code in a function of a simulink function block.
The array waypoints is just an array with two columns and any amount of rows.
I'm trying to find the index at which the [2 x 1] vector target is equal to a row within the waypoints array.
But when the simulation is run, it tells me there is a size mismatch where I first try to define idx. Surely they don't need to match as the purpose is just to find where one of waypoints rows are equal to target?
function targetnew = setwaypoint(d2w,target,accuracy)
waypoints = [100 150; 200 400; 175 275; 600 300]; % pre-defined waypoints (in the future imported as a large array from an external source.
if isempty(target)
target = waypoints(1,:); % initializes the first waypoint.
end
idx = find(all(waypoints == target, 2), 1); % find the first row that match
if isempty(idx) % no row found!
error('could not find target in the waypoints');
end
if d2w > accuracy
idx = idx + 1; % if target waypoint is reached, add one to index.
end
if idx > size(waypoints, 1) % attempt to avoid any issues if simulation time is greater than time taken to reach final waypoint.
targetnew = waypoints(end, :);
else
targetnew = waypoints(idx, :);
end
end
  2 comentarios
Sam Elliott
Sam Elliott el 10 de Mzo. de 2019
I never knew about this, but using ismember with 'rows' worked, thank you. I'm still having issues but they're unrelated to this specific issue now so I'll post it in a new question.

Iniciar sesión para comentar.

Respuestas (1)

Fangjun Jiang
Fangjun Jiang el 8 de Mzo. de 2019
The problem is here.
If target is 1x2 and waypoints is nx2, you can't do waypoints==target
waypoints = [100 150; 200 400; 175 275; 600 300];
target=[]
if isempty(target)
target = waypoints(1,:); % initializes the first waypoint.
end
waypoints==target
  4 comentarios
Fangjun Jiang
Fangjun Jiang el 11 de Mzo. de 2019
If you are using R2018b as indicated, you should have no error running this:
waypoints = [100 150; 200 400; 175 275; 600 300];
target=[200 400];
idx = find(~all(waypoints-target, 2), 1)
idx =
2

Iniciar sesión para comentar.

Categorías

Más información sobre Computer Vision with Simulink 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