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 个评论

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

请先登录,再进行评论。

 采纳的回答

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

6 个评论

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.

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Structures 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by