Я делаю некоторую классификацию и для этой цели необходимо преобразовать целочисленный код в строки. Я написал что-то вроде этого:Сравнение строк и целых чисел в matlab
s(1).class = 1;
s(2).class = 7;
s(3).class = 9;
[s([find([s.class] == 1)]).class] = deal('c1'); %first conversion
[s([find([s.class] > 1)]).class] = deal('c2'); %second conversion
и с удивлением обнаружил, s будет массивом 1x4 структуры после второго преобразования вместо ожидаемого массива 1x3 структуры со значениями. Теперь, после некоторых исследований, я понимаю, что после первого преобразования значение s(1).class
равно 'c1'
, а аргумент find
во втором преобразовании - это не то, что я предполагал. Оператор [s.class]
фактически возвращает что-то вроде строки 'c1\a\t'
с escape-последовательностями ASCII для колокольчика и горизонтальной вкладки.
В сравнении работает (возвращая матрицу [1 1 1 1]
и тем самым расширяя свою структуру) Я предполагаю, что MATLAB преобразует либо операнд [s.class]
или операнд 1
. Что это? Что на самом деле сравнивается здесь номерами или символами?
А с другой стороны есть встроенный способ сделать >
более ограничительным, i. е. требовать, чтобы операнды были одного типа, и если бы не ошибка?
Возможно, это будет проще, если вы объясните, чего вы хотите достичь. Еще лучше, после ввода ввода и желаемого вывода –
Это не столько желание чего-то добиться. Мне просто интересно, что происходит, когда я говорю matlab ''a'> 1', как я спрашиваю, над каким операндом преобразуется. Если это необходимо для достижения чего-то, то второй вопрос является релевантным: я хотел бы изменить поведение '>' так, чтобы '' a '> 1' дал мне некоторый вывод, например: недопустимое сравнение между char и int , –
О, я понимаю сейчас –