matlab中多个矩阵拼接问题

excel中有多串数据OA(aaabbbcccde),Matlab分别读取出aaa,bbb,ccc三组数据并进行相应的数据运算,最后再将运算后的结果以OA(AAABBBCCCde)的形式存储在另一个excel表中。现在的问题出在最后这一步,望大神给予帮助,谢谢。
[Time,Data]=xlsread('test.xlsx','TestSheet','b:c');
for i=2:length(Data)
tmpe1=char(Data(i)); %取得字符型数据OA(aaabbbcccde)
data1(i,1)=str2num(tmpe1(4:6)); %data1的第i行,第1列
data2(i,1)=str2num(tmpe1(7:9));
data3(i,1)=str2num(tmpe1(10:12));
end
y1=fivethree_smoothing(data1,5); %利用五点三次平滑法进行处理
y2=fivethree_smoothing(data2,5);
y3=fivethree_smoothing(data3,5);

for j=1:length(y1) %将负数变为0,正数不变
if y1(j)<0;
y1(j)=0;
end
if y2(j)<0;
y2(j)=0;
end
if y3(j)<0;
y3(j)=0;
end
end
x1=round(y1); %四舍五入
x2=round(y2);
x3=round(y3);
z1=num2str(x1,'%03d'); %将处理后的数据转为字符串,左边不足3位补0
z2=num2str(x2,'%03d');
z3=num2str(x3,'%03d');
z0='OA(';
z4='00)';
%data=cat(2,z0,z1,z2,z3,z4)
data=[z0,z1,z2,z3,z4]

输出的结果不是一串一串OA(...)数据,而是一整串OA(001043054051046039030018008002......)

因为你的z1, z2, z3数据是按行排的,最后就直接一行接起来了。把代码改成:

[Time, Data] = xlsread('test.xlsx','TestSheet','b:c');
len = length(Data);
data = zeros(len, 3);
for i = 2:len
    data(i, :) = str2num(reshape(Data{i}, 3, [])');
end

y = zeros(len, 3);
y(1,:) = fivethree_smoothing(data(1,:), 5);
y(2,:) = fivethree_smoothing(data(2,:), 5);
y(3,:) = fivethree_smoothing(data(3,:), 5);

y(y<0) = 0;
y = num2str(round(y), '%03d');
data=[repmat('OA(', len, 1), y, repmat('00)', len, 1)]

追问

Subscripted assignment dimension mismatch.
data(i, :) = str2num(reshape(Data{i}, 3, [])');
for循环里面的语句提示错误?另外转置符'放在此处的意思是将reshape后的矩阵转置吗?谢谢

追答

‘表示转置。我忘记字符串中只有4到12位有效了。修改代码如下:

[Time, Data] = xlsread('test.xlsx','TestSheet','b:c');
len = length(Data);
data = zeros(len, 3);
for i = 2:len
    data(i, :) = str2num(reshape(Data{i}(4:12), 3, [])')';
end
 
y = zeros(len, 3);
y(1,:) = fivethree_smoothing(data(1,:), 5);
y(2,:) = fivethree_smoothing(data(2,:), 5);
y(3,:) = fivethree_smoothing(data(3,:), 5);
 
y(y<0) = 0;
y = num2str(round(y), '%03d');
data=[repmat('OA(', len, 1), y, repmat('00)', len, 1)]

 你没把text.xlsx贴上来,我也无法测试代码。

追问

 因字数受限,可以假定excel表里有很多组一样的数据OA(04813616200)  0.05s 作为测试,0.05s是时间,数据是按时间每0.05秒递增而变化。

  五点三次平滑法的函数如下:

运行你的代码后,提示了上面的错误,我琢磨着应该是平滑函数的实参不一致,但不知如何修改。

追答

好吧,我又粗心了,代码继续改成:

[Time, Data] = xlsread('test.xlsx','TestSheet','b:c');
len = length(Data);
data = zeros(len, 3);
for i = 2:len
    data(i, :) = str2num(reshape(Data{i}(4:12), 3, [])')';
end
  
y = zeros(len, 3);
y(1,:) = fivethree_smoothing(data(:,1), 5);    %
y(2,:) = fivethree_smoothing(data(:,2), 5);    %
y(3,:) = fivethree_smoothing(data(:,3), 5);    %
  
y(y<0) = 0;
y = num2str(round(y), '%03d');
data=[repmat('OA(', len, 1), y, repmat('00)', len, 1)]

温馨提示:答案为网友推荐,仅供参考
相似回答