is it possible to expand [0 {9}, 45 {2}, 0 {9}]
    5 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Triveni
      
 el 9 de Ag. de 2016
  
    
    
    
    
    Comentada: Triveni
      
 el 10 de Ag. de 2016
            I have a matrix like [0 {9}, 45{2}, 0{9}] i want to expand it like
 [0 0 0 0 0 0 0 0 0 45 45 0 0 0 0 0 0 0 0 0]? and it works like loop, [ 0{k}, 45{k}, 0{k}]
please help.
2 comentarios
  Image Analyst
      
      
 el 9 de Ag. de 2016
				What is [0 {9}, 45{2}, 0{9}]? Is it a cell array? Please give code for us to get [0 {9}, 45{2}, 0{9}] so we can then expand it.
Respuesta aceptada
  Image Analyst
      
      
 el 9 de Ag. de 2016
        If you're stuck starting with a string in that special format, then this code will parse it and produce the output vector
str = '[-45_{2}, 120, 90, 60, 120, 90, -45, 90, -45, 60, 90_{2}, 45, 120, 90, 120, 60, 30, 45, 120, 45, 90, 60, 30, 45, 30_{3}, 120, 60_{2}, 30]'
% Get rid of brackets
str(str== '[') = [];
str(str== ']') = [];
words = strsplit(str, ',')
output = [];
for k = 1 : length(words)
  % See if there is a brace
  thisWord = words{k}
  braceLocation = strfind(thisWord, '{');
  if isempty(braceLocation)
    % There no brace there.
    theNumber = str2double(thisWord);
    theRepeat = 1;
  else
    % There is a brace there.
    theNumber = str2double(thisWord(1:braceLocation-2));
    theRepeat = str2double(thisWord(braceLocation+1:end-1));
  end
  fprintf('Repeat %d for %d times.\n', theNumber, theRepeat);
  % Repeat this number the required number of times and append to the output.
  output = [output, theNumber * ones(1, theRepeat)];
end
% Echo to command window:
output
6 comentarios
  Image Analyst
      
      
 el 9 de Ag. de 2016
				You keep changing the format. Why is there no comma after the first 45? Or is it that the first one never has a comma but all the others do? Where are you getting these strings from anyway?
Más respuestas (3)
  Sean de Wolski
      
      
 el 9 de Ag. de 2016
        This should do it:
str = '[0 {9}, 45{2}, 0{9}]';
expr = '(?<num>\d*)'; % match digits
nums = cellfun(@str2double,regexp(str,expr,'match')); % extract and convert
repelem(nums(1:2:end),nums(2:2:end)) % repelem
2 comentarios
  Walter Roberson
      
      
 el 9 de Ag. de 2016
				Not every entry has a repeat; also the repeats have an underscore between the number and the {
  Walter Roberson
      
      
 el 9 de Ag. de 2016
        Paste it into a string, and then you could use string processing. For example you could use regexprep with dynamic regular expressions and the ${} output replacement construct.
0 comentarios
Ver también
Categorías
				Más información sobre Numerical Integration and Differentiation en Help Center y File Exchange.
			
	Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





