В чем разница между строкой и классом символов в MATLAB?В чем разница между строками и символами в Matlab?
a = 'AX'; % This is a character.
b = string(a) % This is a string.
В чем разница между строкой и классом символов в MATLAB?В чем разница между строками и символами в Matlab?
a = 'AX'; % This is a character.
b = string(a) % This is a string.
Есть два способа представления текста в MATLAB®. Вы можете хранить текст в массивах символов. Типичное использование - хранить короткие фрагменты текста в качестве символьных векторов. Начиная с версии 2016b, вы также можете хранить несколько фрагментов текста в строковых массивах. Строковые массивы предоставляют набор функций для работы с текстом в виде данных.
Это как два представления отличаются:
доступа Element. Для представления векторов различной длины char
необходимо было использовать массивы cell
, например. ch = {'a', 'ab', 'abc'}
. С помощью строк они могут быть созданы в реальных массивах: str = [string('a'), string('ab'), string('abc')]
. Однако, чтобы index characters в массив строк непосредственно, фигурные скобки обозначения должен быть использован: использовать
str{3}(2) % == 'b'
памяти. Шары используют столько же байтов, сколько и символов. string
s имеют накладные расходы:
a = 'abc'
b = string('abc')
whos a b
возвращает
Name Size Bytes Class Attributes a 1x3 6 char b 1x1 132 string
Лучшее место для начала для понимания разницы является the documentation. Основное различие, как указано здесь:
- массив символов представляет собой последовательность символов, так же, как числовой массив представляет собой последовательность чисел. Типичным использованием является сохранение коротких фрагментов текста в виде символьных векторов, таких как
c = 'Hello World';
.- Строковый массив - это контейнер для фрагментов текста. Строковые массивы предоставляют набор функций для работы с текстом в виде данных. Чтобы преобразовать текст в строковые массивы, используйте функцию
string
.
Вот еще несколько ключевых моментов об их различиях:
char
против string
. Таким образом, они будут иметь разные наборы методов, определенных для каждого. Подумайте, какие операции вы хотите сделать в своем тексте, а затем выберите тот, который лучше всего их поддерживает.Поскольку класс string
является классом контейнера, помните, как его размер отличается от эквивалентного представления массива символов.Используя ваш пример:
>> a = 'AX'; % This is a character.
>> b = string(a) % This is a string.
>> whos
Name Size Bytes Class Attributes
a 1x2 4 char
b 1x1 134 string
Обратите внимание, что string
контейнер перечисляет его размер, как 1x1
(и занимает больше байт в памяти) в то время как массив символов, как следует из его названия, а 1x2
массив символов.
Они не всегда могут использоваться взаимозаменяемо, и вам может потребоваться преобразовать их между двумя для определенных операций. Например, string
объектов не могут быть использованы в качестве dynamic field names for structure indexing:
>> s = struct('a', 1);
>> name = string('a');
>> s.(name)
Argument to dynamic structure reference must evaluate to a valid field name.
>> s.(char(name))
ans =
1
Строки имеет немного накладные расходы, но по-прежнему увеличиваться на 2 байта на символ. После каждых 8 символов он увеличивает размер переменной. Красная линия - y=2x+127
.
фигура создается с помощью:
v=[];N=100;
for ct = 1:N
s=char(randi([0 255],[1,ct]));
s=string(s);
a=whos('s');v(ct)=a.bytes;
end
figure(1);clf
plot(v)
xlabel('# characters')
ylabel('# bytes')
p=polyfit(1:N,v,1);
hold on
plot([0,N],[127,2*N+127],'r')
hold off