我需要相对于某个值转换字符串,所以
2 3 4 5 6 1 5 16
成为
2 3 4 5 0 5 1 5 0 5 5 5 1
所以,2 = 2
,3 = 3
,4 = 4
,6 = 5
和6 = 1
,5 = 5
和5 = 0
,{{1 }}
在这种情况下,我转换了相对于16 = 5 5 5 1
的行。我现在不知道该怎么做,所以,还没有代码。
答案 0 :(得分:6)
您可以使用正则表达式替换(regexprep
)。您需要negative lookbehind才能避免将6
中的16
检测为单个6
。
x = '2 3 4 5 6 1 5 16';
y = regexprep(x, {'(?<!\d)5' '(?<!\d)6' '16'}, {'5 0' '5 1' '5 5 5 1'});
这给出了
y =
2 3 4 5 0 5 1 1 5 0 5 5 5 1
答案 1 :(得分:2)
我有简单的写循环方法,有人可以给你非循环的矢量化解决方案:
a = [2 3 4 5 6 1 5 16];
k = 5;
c = [];
for t = 1:size(a,2)
b = a(t)/k;
if b >= 1
cat1 = [repmat([k],floor(b),1)',mod(a(t),5)];
else
cat1 = a(t);
end
c = [c,cat1]
end
c是解决方案:
>> c = 2 3 4 5 0 5 1 1 5 0 ...
k你可以设置为5或4或任何数字。
答案 2 :(得分:0)
对不起,我问完后我在2分钟内完成了所有工作。
data=[2 3 4 5 6 1 5 16];
len=length(data);
mass=zeros();
j=1;
for i=1:len
if data(i)>5
x=data(i);
mass(j)=5;
mass(j+1)=x-5;
j=j+2;
else
if data(i)==5;
mass(j)=5;
mass(j+1)=0;
j=j+2;
else data(i)<5;
mass(j)=data(i);
j=j+1;
end
end
end