is it possible to expand [0 {9}, 45 {2}, 0 {9}]
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Triveni
am 9 Aug. 2016
Kommentiert: Triveni
am 10 Aug. 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 Kommentare
Image Analyst
am 9 Aug. 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.
Akzeptierte Antwort
Image Analyst
am 9 Aug. 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 Kommentare
Image Analyst
am 9 Aug. 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?
Weitere Antworten (3)
Sean de Wolski
am 9 Aug. 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 Kommentare
Walter Roberson
am 9 Aug. 2016
Not every entry has a repeat; also the repeats have an underscore between the number and the {
Walter Roberson
am 9 Aug. 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 Kommentare
Siehe auch
Kategorien
Mehr zu Oceanography and Hydrology finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!