Конкатенация строк Matlab для создания файлов - PullRequest
2 голосов
/ 30 октября 2019

Я следую онлайн-курс, чтобы изучать и практиковать Matlab. В курсе, ребята пишут:

basefilename = 'testfile';
filename = [basefilename num2str(1) ".mat"]

и Matlab возвращает:

testfile1.mat

Однако, когда я ввожу один и тот же вход, я получаю следующее:

filename = 

  1×3 string array

    "testfile"    "1"    ".mat"

Я попробовал более обычный метод конкатенации, введя

filename = [basefilename + "1" + ".mat"]

и верный вывод:

testfile1.mat

Однако при изменении "1" на num2str(1)(чтобы заменить число на переменную, которая позже может изменяться в цикле for):

filename = [basefilename + num2str(1) + ".mat"]

Я получаю совершенно другой вывод:

filename = 

  1×8 string array

    "165.mat"    "150.mat"    "164.mat"    "165.mat"    "151.mat"    "154.mat"    "157.mat"    "150.mat"

Мне было интересно,кто-то может объяснить, почему каждый метод ввода возвращает такие резко отличающиеся результаты. Мне кажется, что все три метода должны возвращать одно и то же ...

Ответы [ 2 ]

2 голосов
/ 30 октября 2019
basefilename = 'testfile';

basefilename - это массив символов (обратите внимание на одинарные кавычки). Двойные кавычки подразумевают одну строковую переменную.

filename = [basefilename num2str(1) '.mat']

даст желаемые результаты путем объединения массивов символов, в то время как

filename = ["stuff" ".mat"]

сгенерирует массив из 2 строк, и, как вы заметили

filename = ["stuff" + ".mat"]

возвращает одну объединенную переменную типа string.

Пример, который вы показали с помощью

filename = ['chars'  ".strings"]

filename = ['chars' + "strings"]

, приведёт массив char (одинарные кавычки) к строке изатем выполните задание.

0 голосов
/ 30 октября 2019

Можете ли вы попробовать удалить «+» и «». Итак:

filename = [basefilename num2str (1) '.mat']

Символ '+' не используется для объединения в MATLAB, и существует разница между 'и' вMATLAB ( Индексирование строк в MATLAB: одинарные и двойные кавычки )

...