Почему я получаю эту ошибку при вставке символа в матрицу MATLAB? - PullRequest
1 голос
/ 12 апреля 2011

Я строю матрицу 16x16, состоящую из букв в MATLAB.Например, я попытался:

for i=1:2:3
    C(i,2)=char('B');    
end

, чтобы поместить букву 'B' в соответствующее место в матрице.Однако это дает значение 66 в матрице вместо просто буквы 'B'.Что не так?

Ответы [ 3 ]

1 голос
/ 12 апреля 2011

Скорее всего, проблема в том, что у вас уже есть переменная с именем C, в которой содержатся числовые данные.Когда вы пытаетесь поместить символ в числовую матрицу, он преобразуется в его значение ASCII.Если вы очистите переменную C перед запуском вышеприведенного кода, вы должны получить матрицу символов для C:

>> clear C
>> for i=1:2:3, C(i,2) = 'B'; end
>> C

C =

 B

 B

Обратите внимание, что в этом случае C является массивом 3 на 2с нулевыми символами (код ASCII 0) в первом столбце и во втором ряду второго столбца.Если вы хотите инициализировать C массивом нулевых символов размером 16 на 16, вы можете заменить оператор CLEAR в приведенном выше коде на:

C = char(zeros(16));

Изатем запустите ваш цикл, чтобы заполнить ваши значения.Также обратите внимание, что char('B') является избыточным, поскольку 'B' уже имеет тип символа.

0 голосов
/ 12 апреля 2011

Matlab сохраняет букву «B» как целочисленный код ASCII. На самом деле, char означает int8.

0 голосов
/ 12 апреля 2011

Если я делаю

for i=1:3
    C(i)=char('A');
end

Я получаю C=AAA, как и следовало ожидать. Я подозреваю, что причина, по которой вы получаете десятичное значение символа, заключается в том, что вы могли предварительно выделить C как C=zeros(16). MATLAB инициализировал массив как тип numeric и, соответственно, когда вы заменили элемент на char, он быстро преобразовал его в числовое значение.

Лучше было бы использовать cells, а затем преобразовать его в матрицу.

C=cell(4,4);%# create an empty 4x4 cell
for i=1:16
    C{i}=char('A');
end

C=


    'A'    'A'    'A'    'A'
    'A'    'A'    'A'    'A'
    'A'    'A'    'A'    'A'
    'A'    'A'    'A'    'A'

Теперь используйте cell2mat, чтобы преобразовать его в матрицу:

Cmatrix=cell2mat(C)

Cmatrix=

    AAAA
    AAAA
    AAAA
    AAAA

Обычно я бы не использовал циклы, но я не знаю ваших точных требований, поэтому я показал пример по вашему вопросу.

...