2012-10-08 5 views
0

версии: Matlab 2009aТип заливки вектор в Matlab

Я генерации вектора размера < 1x116286> с помощью функции() randsrc. Так я снова добавить его в матрицу того же размера, но типа в формате uint8, я делаю следующим образом -

l=typecast(randsrc(1,v(2)),'uint8'); 

Теперь, Matlab изменился возвращаемый вектор элементов - [240,63,0] вместо от [-1,1], с размером < 1x930288 uint8>. Это ожидается, так как double и uint8 имеют разный размер, но мне нужен вектор того же размера и значений после литья типов.

PS: Я хочу вычесть или добавить «1» из всех значений trhe на матрице размером < 1x116286>. Есть ли какой-нибудь другой способ сделать это?

ответ

5

Как я понимаю проблему, есть несколько проблем с вышесказанным:

  • uint8 является тип без знака, так не будет поддерживать отрицательное смещение;
  • Функция «typecast» используется для переинтерпретации существующих данных, а не для ее преобразования: здесь вы интерпретируете каждый байт вывода с плавающей запятой randsrc (...) как целое число.

К сожалению, у меня нет под рукой Matlab для проверки, но следующее должно обеспечить что-то ближе к тому, что вы после:

l = int8(randsrc(1,v(2))); 
+0

+1 Это правильно. Может быть, лучше включить другой вектор в двойное, но это зависит от того, что OP хочет сделать позже. – angainor

+0

сделано, точно так же, как C, не знаю, почему я так думал. Кстати. Спасибо за помощь –

0

а вместо формирования вектора (-1,1 .. .) и добавив его к некоторому вектору «z», я сделал что-то вроде этого.

l =randsrc(1,v(2)); 
z(l==-1)=z(l==-1)-1; 
z(l==1)=z(l==1)+1; 

Итак, теперь мне не нужно менять типы.

+0

«z (l == 1) = z (l == 1) +1", безусловно, эквивалентно "z (l == 1) = 2"? – Dan

+0

nopes, что делают мои коды, он выбирает все элементы Z, для которых соответствующие элементы l-вектора равны 1. поэтому он будет увеличивать некоторые выбранные элементы z –

+0

oh right, очевидно, извините. – Dan

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