search for the position of a number inside a cell (cell with existence of empty rows)
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Alberto Acri
      
 el 10 de Feb. de 2024
  
    
    
    
    
    Respondida: Star Strider
      
      
 el 10 de Feb. de 2024
            I am trying to look for each row of 'N' inside a cell.
I am using 'find' but it doesn't seem to work. 
I should identify, in the cell, the rows of N. In this case, row 3 and row 19.
parameters = importdata("parameters.mat");
N = [parameters{3,1}; parameters{19,1}];
tt = 1;
    for t = 1:height(parameters)
        [r,c] = find(parameters{t,1}(1,1) == N(tt,1) & ...
                        parameters{t,1}(1,2) == N(tt,2) & ...
                        parameters{t,1}(1,3) == N(tt,3) & ...
                        parameters{t,1}(1,4) == N(tt,4));
    end
0 comentarios
Respuesta aceptada
  Star Strider
      
      
 el 10 de Feb. de 2024
        Use ismember (since you have the exact values, otherwise ismembertol) and any (here using the default column orientation, dimension = 1) to be inclusive, with cellfun (that loops internally) — 
load('parameters')
% whos
parameters
N = [parameters{3,1}; parameters{19,1}];                                        % 'Target' Values
idx = cell2mat(cellfun(@(x)any(ismember(x,N)), parameters, 'Unif',0));          % Logical Index Vector
Result_Index = find(idx)                                                        % Numeric Index
Result = parameters(idx)                                                        % Result Values
There are likely other ways to do this as well.  
.
0 comentarios
Más respuestas (1)
  VBBV
      
      
 el 10 de Feb. de 2024
        
      Editada: VBBV
      
      
 el 10 de Feb. de 2024
  
      Use a | instead of &. OR in place of AND
2 comentarios
  VBBV
      
      
 el 10 de Feb. de 2024
				Using for loop it can be like this
p = load("parameters.mat");
N = [p.parameters{3,1}; p.parameters{19,1}]
tt = 1;
    for t = 1:height(p.parameters)-1
        K = p.parameters{t+1,1};
        if ~isempty(K)
            if tt == 1  % N(1,:) inside parameter 
                [r,c] = find((K(1) - N(tt,1)) < 1e-3 & ...
                            (K(2) - N(tt,2))  < 1e-3 & ...
                            (K(3) - N(tt,3)) < 1e-3 & ...
                            (K(4) - N(tt,4)) < 1e-3)
            else  % N(2,:) inside parameter 
                tt = tt + 1;
                [r,c] = find((K(1) - N(tt,1)) < 1e-3 & ...
                            (K(2) - N(tt,2))  < 1e-3 & ...
                            (K(3) - N(tt,3)) < 1e-3 & ...
                            (K(4) - N(tt,4)) < 1e-3)
            end 
        end 
    end
You can try using ismember  function  to vaoid  for loop 
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


