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

基本的に、複数の文字列を1つのマトリックスに結合することを検討しています。

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'

char2 番目の文字列の長さに合わせて最初の文字列にスペースを埋め込む方法に注意してください。繰り返しになりますが、配列を事前に割り当てていない限り、または他に方法がない場合を除き、これを loop で使用しないでください。

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 に答える