0

我怎么能用字符串做同样的事情:

a = [1 2 3; 4 5 6];
c = [];
for i=1:5
b = a(1,:)+i;
c = [c;b];   
end

c =

 2     3     4
 3     4     5
 4     5     6
 5     6     7
 6     7     8

基本上希望将几个字符串组合成一个矩阵。

4

2 回答 2

3

您正在循环中增加一个变量,这在 Matlab 中是一种罪恶 :) 所以我将向您展示一些更好的方法来进行数组连接。

有细胞串:

>> C = {
    'In a cell string, it'
    'doesn''t matter'
    'if the strings'
    'are not of equal lenght'};

>> C{2}
ans = 
    doesn't matter

您可以像这样在循环中使用它:

% NOTE: always pre-allocate everything before a loop
C = cell(5,1);

for ii = 1:5
    % assign some random characters
    C{ii} = char( '0'+round(rand(1+round(rand*10),1)*('z'-'0')) );
end

有普通数组,它的缺点是您必须事先知道所有字符串的大小:

a = [...
    'testy'     % works
    'droop'
];

b = [...
    'testing'              % ERROR: CAT arguments dimensions 
    'if this works too'    % are not consistent. 
    ];

对于这些情况,请使用char

>> b = char(...
      'testing',...
      'if this works too'...
      );
b =
   'testing          '
   'if this works too'

注意如何char用空格填充第一个字符串以适应第二个字符串的长度。再说一遍:不要在循环中使用它,除非你已经预先分配了数组,或者如果真的没有其他方法可以走。

在 Matlab 命令提示符下键入help strfun以获取 Matlab 中可用的所有与字符串相关的函数的概述。

于 2012-10-19T05:56:03.200 回答
1

你的意思是在每个矩阵位置存储一个字符串?你不能这样做,因为矩阵是在基本类型上定义的。您可以在每个位置上都有一个 CHAR:

>> a = 'bla';
>> b = [a; a]  

b <2x3 char> =

bla
bla

>> b(2,3) = 'e'

b =

bla
ble

如果要存储矩阵,请使用元胞数组(MATLAB 参考Loren Shure 的博客),它们有点相似,但使用“{}”而不是“()”:

>> c = {a; a}

c = 

    'bla'
    'bla'

>> c{2}

ans =

bla
于 2012-10-19T00:01:55.410 回答