Создать массив строк

35

Возможно ли создать массив строк в MATLAB в цикле for?

Например,

for i=1:10
Names(i)='Sample Text';
end

Кажется, я не могу это сделать.

  • 3
    Причина, по которой ваш код не работает, состоит в том, что строка в MATLAB представляет собой одномерный массив символов, поэтому вы пытаетесь втиснуть 11 символов в один элемент массива. Вам либо нужно использовать ячейки (которые в основном являются массивами, в которых каждый элемент содержит только указатель на некоторые данные, и что «некоторые данные» могут быть строкой), как предложено Amro; или вам нужно использовать массив двумерных символов, предложенный b3 (с оговорками, обсуждаемыми ниже в ответе Amro ;-)).
Теги:

7 ответов

42
Лучший ответ

Вам нужно использовать ячейки-массивы:

names = cell(10,1);
for i=1:10
    names{i} = ['Sample Text ' num2str(i)];
end
  • 2
    Это также возможно сделать с массивами символов. Смотри мой ответ .
  • 1
    @ b3: при условии, что они имеют одинаковую длину (или дополнены пробелами для соответствия)
Показать ещё 1 комментарий
9

Вы можете создать массив символов, который делает это через цикл:

>> for i=1:10
Names(i,:)='Sample Text';
end
>> Names

Names =

Sample Text
Sample Text
Sample Text
Sample Text
Sample Text
Sample Text
Sample Text
Sample Text
Sample Text
Sample Text

Однако это было бы лучше реализовано с помощью REPMAT:

>> Names = repmat('Sample Text', 10, 1)

Names =

Sample Text
Sample Text
Sample Text
Sample Text
Sample Text
Sample Text
Sample Text
Sample Text
Sample Text
Sample Text
8

Другая опция:

names = repmat({'Sample Text'}, 10, 1)
  • 2
    ... который создает тот же массив ячеек, что и Amro, но с техникой, используемой b3 для символьного массива ;-).
2

Другим решением этого старого вопроса является новый контейнер string array, введенный в Matlab 2016b. Из того, что я читал в официальном документе Matlab , этот контейнер похож на массив ячеек, и большинство функций, связанных с массивом, должны работать из коробка. Для вашего случая новое решение будет:

a=repmat('Some text', 10, 1);

Это решение похоже на Rich C решение, примененное к строковому массиву.

1

В MATLAB недавно добавлены новые функции:

Строковые массивы были введены в R2016b (as Budo и gnovice уже упоминалось):

Строковые массивы хранят фрагменты текста и предоставляют набор функций для работа с текстом в виде данных. Вы можете индексировать, изменять и объединять строки массивов так же, как вы можете с помощью массивов любых других тип.

Кроме того, начиная с R2017a, вы можете создать string, используя двойные кавычки "".

Поэтому, если ваша версия MATLAB >= R2017a, выполните следующие действия:

for i = 1:3
    Names(i) = "Sample Text";
end

Проверьте вывод:

>> Names

Names = 

  1×3 string array

    "Sample Text"    "Sample Text"    "Sample Text"

Не нужно больше обращаться к массивам ячеек.

1

Как уже упоминалось Amro, наиболее кратким способом это использовать ячейки массивов. Однако Budo коснулся нового string class, представленного в версии R2016b MATLAB. Используя этот новый объект, вы можете легко создать массив строк в цикле следующим образом:

for i = 1:10
  Names(i) = string('Sample Text');
end
  • 0
    Это приводит к ошибке: «Неопределенная функция 'string' для входных аргументов типа 'char'."
  • 0
    @Danijel: это опция в более новых версиях MATLAB. Я предполагаю, что вы используете более старую версию.
0

одним из простейших способов создания строковой матрицы является следующее:

x = [{'first string'} {'Второй параметр} {' Третий текст '} {' Четвертый компонент '}]

  • 1
    Но он явно попросил способ сделать это через цикл for .. Ваш метод должен быть ручным, никоим образом вы не можете сделать это для 1k + записей.
  • 0
    Это решило мою проблему (я просто искал быстрый и грязный способ заполнить массив жестко закодированными строками, и это был лучший результат поиска в Google).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню