объединяя строку и число в Matlab - PullRequest
2 голосов
/ 17 февраля 2012

Скажите, что у меня есть матрица значений температуры и вектор, соответствующий глубине измерений, например,

depth = [1,4,8,11,15,16,20];
Temp = rand(1800,7);

Я хотел бы вставить строку заголовков в первый ряд Temp, гдекаждый заголовок представляет глубину измерения.Мне нужен заголовок, чтобы указать temp, а затем глубину, например, temp1, temp4, temp8, temp11 ... и т. Д.

Я думал о том, чтобы сделать что-то вроде определения 'temp' и затем добавить соответствующую глубину каждого столбцаНапример,

varstarter = 'temp';

А затем используйте что-то вроде 'regexp', но я не уверен, как это будет работать.Есть предложения?

Ответы [ 2 ]

5 голосов
/ 17 февраля 2012
arrayfun(@(x) ['temp' int2str(x)],depth,'UniformOutput',false)

Здесь @(x) ['temp' int2str(x)] определяет анонимную функцию, которая добавляет целочисленный ввод как символы к данной последовательности символов temp.arrayfun затем применяет эту функцию к каждому элементу второго аргумента, то есть depth.(Так как arrayfun чаще всего используется для получения числового результата, например, одного числа для каждого применения функции, вывод обычно представляет собой матрицу с размером, по меньшей мере, в одном измерении, равном второму вводу. Таким образом, опция 'UniformOutput',false сообщает, чтоздесь дело не в этом (длина строк зависит от количества цифр каждого входа), выход должен быть массивом ячеек.)

Используйте [ans; num2cell(Temp)];, чтобы объединить заголовки и числовые данные в одинмассив ячеек.

3 голосов
/ 17 февраля 2012

Небольшое улучшение стиля по сравнению с хорошим ответом @ arne.b:

 arrayfun(@(x) {['temp' int2str(x)]},depth);

Проверьте этот пост для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...