Matlab 从str连接创建数组
你好,我有这两个向量Matlab 从str连接创建数组,matlab,for-loop,concat,Matlab,For Loop,Concat,你好,我有这两个向量 Q = [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4] 及 我想把它们连接成一个数组 Time = [20001,20002,20003,20004,20010....] 或 到目前为止,我尝试了这个代码 m = zeros(136,1) for i=1:136 m(i,1)= strcat(Q(i),Year(i)); end Matlab向我输出了这个: 下标赋值维度不匹配 请帮
Q = [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]
及
我想把它们连接成一个数组
Time = [20001,20002,20003,20004,20010....]
或
到目前为止,我尝试了这个代码
m = zeros(136,1)
for i=1:136
m(i,1)= strcat(Q(i),Year(i));
end
Matlab向我输出了这个:
下标赋值维度不匹配
请帮助?您可以使用
arrayfun
如果希望输出为字符串格式(中间有一个'Q'
),则使用sprintf
格式化字符串
Time = arrayfun( @(y,q) sprintf('%dQ%d', y, q ), Year, Q, 'uni', 0 );
产生一个单元格数组
Time =
'2000Q1' '2000Q2' '2000Q3' '2000Q4' '2001Q1' '2001Q2' '2001Q3'...
或者,如果跳过'Q'
,可以将每个数字保存在一个数组中
Time = arrayfun( @(y,q) y*10+q, Year, Q )
使用正则数组生成
Time =
20001 20002 20003 20004 20011 20012 20013 ...
这是因为您正在将m初始化为零(136,1),然后尝试将完整字符串保存到第一个值中。很明显,一个替身不能容纳一根弦 我给你两个选择,但我喜欢第一个
1。-您只需使用单元格数组,即可将代码转换为:
m = cell(136,1)
for ii=1:136
m{ii}= strcat(Q(ii),Year(ii));
end
然后m
将是:m{1}='2000Q1'代码>
2。-或者如果您知道您的字符串将始终保持相同的大小(在您的情况下,它就像它们总是6),您可以:
然后m
将是:m(1,:)=[50 48 48 48 81 49]
转换后的do ASCII将是2000Q1如果你的向量Year
和Q
具有相同数量的元素,你不需要一个循环,只需将它们转置(或确保它们在列中),然后与[]
操作员:
Time = [ num2str(Year.') num2str(Q.') ] ;
将为您提供:
20001
20002
20003
20004
20011
...
2000Q1
2000Q2
2000Q3
2000Q4
2001Q1
...
如果需要'Q'
字符,请将其插入表达式中:
Time = [ num2str(Year.') repmat('Q',length(Q),1) num2str(Q.') ]
time = cellstr( [num2str(Year.') repmat('Q',length(Q),1) num2str(Q.')] ) ;
将为您提供:
20001
20002
20003
20004
20011
...
2000Q1
2000Q2
2000Q3
2000Q4
2001Q1
...
这将是一个字符数组,如果需要单元格数组,请在同一表达式上使用cellstr
:
Time = [ num2str(Year.') repmat('Q',length(Q),1) num2str(Q.') ]
time = cellstr( [num2str(Year.') repmat('Q',length(Q),1) num2str(Q.')] ) ;
要获取字符串:
strtrim(mat2cell(num2str([Year(:) Q(:) ],'%i%i'), ones(1,numel(Q))));
说明:
将两个数字向量合并为两列(使用[…]
)
转换为字符数组,其中每行是两个数字的串联(使用with-like格式说明符)。假设所有数字都是整数(如果不是,请更改格式说明符)。如果并非所有串联数字的位数都相同,则可能会引入不需要的空格
转换为单元格数组,将每行放在不同的单元格中(使用)
删除每个单元格中的空白(使用)
要获取编号:适用于上述内容:
str2double(strtrim(mat2cell(num2str([Year(:) Q(:) ],'%i%i'), ones(1,numel(Q)))));
或者直接计算
10.^ceil(max(log10(Q)))*Year + Q;
我正要向Hoki建议这个解决方案。对于Q.@C.Chris中的两位数字来说是很好的,可能你的向量已经是列格式的(不像你文章中的描述)。在这种情况下,请在年末
和Q
时删除“
操作符。