webentwicklung-frage-antwort-db.com.de

Zeichenfolge an Matlab-Array anhängen

Wie füge ich einen String an ein Matlab-Array an?

Hier ist ein kleiner Code-Ausschnitt von dem, was ich versuche zu tun:

for_loop
  filename = 'string';
  name=[name; filename]
end
29
Name

Sie müssen Zellenarrays verwenden. Wenn die Anzahl der Iterationen vorher bekannt ist, schlage ich vor, dass Sie eine Zuweisung vornehmen

N = 10;
names = cell(1,N);
for i=1:N
    names{i} = 'string';
end

sonst kannst du so etwas machen:

names = {};
for i=1:10
    names{end+1} = 'string';
end
81
Amro

Wie andere Antworten bereits erwähnt haben, ist die Verwendung von cell arrays wahrscheinlich der einfachste Ansatz, der dazu führt, dass Ihre Variable name ein Zellenarray ist, in dem jedes Zellenelement einen String enthält.

Es gibt jedoch eine weitere Option, die die Funktion STRVCAT verwendet, mit der Zeichenfolgen vertikal verkettet werden. Anstatt ein Zellenarray zu erstellen, wird eine 2D-Zeichenmatrix erstellt, in der jede Zeile eine Zeichenfolge enthält. STRVCAT füllt bei Bedarf automatisch die Enden der Zeichenfolgen mit Leerzeichen auf, um die Zeilen der Matrix korrekt auszufüllen:

>> string1 = 'hi';
>> string2 = 'there';
>> S = strvcat(string1,string2)

S =

hi
there
9
gnovice

Verwenden Sie die Funktion strcat, um einen Zeilencode ohne Schleife zu verwenden:

A={'food','banana','orange'}

A = 'Essen' 'Banane' 'Orange'

A = strcat(A,'s')

A = 'Lebensmittel' 'Bananen' 'Orangen'

4
bornTalented

Wie bereits erwähnt, müssen in MATLAB alle Zeichenfolgen in einem Array die gleiche Länge haben. Um Strings unterschiedlicher Länge zu haben, verwenden Sie ein Zellenarray:

name = {};
for i = somearray
  name = [name; {string}];
end
4
lindelof
name=[];
for_loop
    filename = 'string';
    name=[name; {filename}];
end
3
Babak

Der Vollständigkeit halber sollte auch die neue string-Klasse erwähnt werden, die in MATLAB R2016b eingeführt wurde. ein Container für Textdaten zusammen mit einer Reihe von Funktionen zur einfachen Textbearbeitung.

Um es mit meinem anderem Beispiel zu vergleichen, können Sie ein string -Array zuordnen:

N = 10;
names = strings(1,N);
for i=1:N
    names(i) = 'string';
end

Und so können Sie das Array ohne Vorbelegung dynamisch erweitern:

names = strings(0);
for i=1:10
    names(end+1) = 'string';
end

(Natürlich, wenn die Zeichenfolgen alle gleich sind oder eine Sequenz mit einem Muster bilden, gibt es bessere Möglichkeiten, das Array ohne Schleife zu erstellen. Das obige Beispiel war nur ein Beispiel, um das Array einzeln zu füllen).

Der Container string kann auch in/von Zeichenarrays und Zellenarrays von Zeichen konvertieren.

1
Amro

Wenn Sie zwei Arrays wie unten (A und B) verwenden, können Sie diese wie bei anderen Matrizen anhängen.

A = {'a' ; 'b' ; 'c'};
B = {'1' ; '2' ; '3'};
Result = { A{:,1} ; B{:,1} }

Result = 

'a'    'b'    'c'
'1'    '2'    '3'
1
MJay

Ich weiß, dass dies ein alter Thread ist, aber es scheint, als ob Sie nicht einmal eine Schleife benötigen, wenn Sie dies alles in der Schleife tun. Könnten Sie einfach eine vertikale Verkettung verwenden?

   mmm = {'str1'; 'str2'; 'str3'};
   temp = {'a'; 'b'; 'c'};

   mmm = [mmm; temp]

mmm = 

    'str1'
    'str2'
    'str3'
    'a'
    'b'
    'c'
0
Jon Tran