is it possible to expand [0 {9}, 45 {2}, 0 {9}]
2 次查看(过去 30 天)
显示 更早的评论
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 个评论
Image Analyst
2016-8-9
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.
采纳的回答
Image Analyst
2016-8-9
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 个评论
Image Analyst
2016-8-9
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?
更多回答(3 个)
Sean de Wolski
2016-8-9
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 个评论
Walter Roberson
2016-8-9
Not every entry has a repeat; also the repeats have an underscore between the number and the {
Walter Roberson
2016-8-9
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Oceanography and Hydrology 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!