2015-09-18 1 views
1

, когда я пишу этот код (. Только для тестирования Эта вещь происходит другое литье типа тоже):Почему typecasting увеличивает размер строки/столбца матрицы?

y_quan=typecast(y_quan,'int8'); 

размерность y_quan резко меняется. До приведения типов это была двойная матрица 1X15310. Но после этой операции придания тишине он стал матрицей типа intX 1X122480. Почему это происходит? любой пожалуйста, объясните. Как я могу предотвратить это?

+2

Вы прочитали [документацию] (http://mathworks.com/help/matlab/ref/typecast.html)? «typecast отличается от функции броска MATLAB® тем, что он не изменяет входные данные. typecast всегда возвращает такое же количество байтов в выходе Y, как и на входе X» –

+1

Matlab help http: //uk.mathworks. com/help/matlab/ref/typecast.html здесь объясняет это довольно хорошо, по умолчанию предполагается, что ваш y_quan - это массив двойки, который случается с 64 битами, когда вы выводите его на 8 бит Int, ему требуется дополнительная длина для представляют число. – GameOfThrows

ответ

5

Как я могу предотвратить это?

Не используйте typecast, это, очевидно, неправильная функция.

Это поведение, о котором вы явно просите. Из Matlab documentation, which is the obvious place that someone should look when researching functionality:

typecast отличается от функции MATLAB® cast в том, что она не изменяет входные данные. typecast всегда возвращает такое же количество байтов в выходном Y, как и во вход X. Например, приведение 16-разрядного целого числа от 1000 до uint8 с помощью typecast возвращает полные 16 бит в двух 8-битных сегментах (3 и 232), таким образом сохраняя свое первоначальное значение (3 * 256 + 232 = 1000). Функция литой, с другой стороны, обрезает значение входного сигнала 255.

что означает, что ваш double матрица, которая имеет 64 бит на каждый элемент, имеет 15310 * 8 байт хранения. Теперь, при типизации значений 8 бит (== 1Byte), результат будет иметь в 8 раз больше элементов.

 Смежные вопросы

  • Нет связанных вопросов^_^