How to use 'find' function in matlab

In the below code, We have a random population with structures Position (3D array) and Cost. I need to check whether a particular element present in the population If it does then I want to remove it from the population. I'm using 'find' function for doing it. It was working fine with arrays but with structures I'm getting error below error
_ Undefined operator '~=' for input arguments of type 'struct'_
Here is the code
clc; clear all;
varMin = -5;
varMax = 5;
D = 3;
VarSize = [1 D]; % Decision Variables Matrix Size
NP = 3;
empty_individual.Position = [];
empty_individual.Cost = [];
P = repmat(empty_individual, NP, 1);
addpath('E:\Dimensionality Reduction\DR & Optimization\Data\Objective Functions');
CostFunction = @(x) sphere(x);
%%Generating random population
for i = 1:NP
P(i).Position = unifrnd(varMin, varMax, VarSize);
P(i).Cost = CostFunction(P(i).Position);
end
xi = [1 1 1]; % xig
P = P(find(P ~= xi));

4 Comments

You cannot use find like that. _P is 3x1 structure, what you want to find exactly?
Can you suggest any alternative for it.
You have to mention what you are expecting actually?
I need to check whether a particular element present in the population If it does then I want to remove it from the population

Sign in to comment.

 Accepted Answer

idx = 1:length(P) ;
P = P(find(idx ~= xi));

6 Comments

Its not working "I need to check whether a particular element present in the population If it does then I want to remove it from the population"
Your xi is [1 1 1]..P has indices [1 2 3]. [1] is common with xi and P, so the above code picks up only [2 3] indices of P.
Population has two row Position and cost. Lets say I have a population initialized as (Position; Cost) (1 1 1; 3) (2 2 2; 12) (3 3 3; 27)
Say xi = (2 2 2) #Position
As it is in the population then member corresponding to it should be removed from the population. New population should be
(1 1 1; 3) (3 3 3; 27)
Pos = reshape([P.Position] ,3,[])' ;
[val,idx] = ismember(xi,Pos,'rows') ;
pick = setdiff(1:length(P),idx) ;
iwant = P(pick) ;
is there any other way to do it
Define xi as a structure..And try using ismemeber etc.

Sign in to comment.

More Answers (0)

Categories

Asked:

on 28 Mar 2017

Commented:

on 28 Mar 2017

Community Treasure Hunt

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

Start Hunting!