2008-11-22 3 views
7

У меня есть эти 2 вектора:Числовые типы ошибок при умножении двух 2 векторов в MATLAB

alpha = 
    1 1 1 1 1 1 1 1 1 

f_uv = 
    193 193 194 192 193 193 190 189 191 

И когда я делаю это:

alphaf_uv = alpha * f_uv' 

Я получаю сообщение об ошибке:

"??? Error using ==> mtimes 
Integers can only be combined with integers of the same class, or scalar doubles." 

Интересная часть состоит в том, что эта ошибка не появляется, если я определяю те же самые векторы в консоли и пытаюсь выполнить ее умножение.

alpha определяется мной, а f_uv получен из некоторых пикселей в PNG-изображении.

ответ

16

Предполагая, что они являются целыми матрицами для начала, f_uv' может и не быть.

Try:

alphaf_uv = double(alpha) * double(f_uv') 

и дайте нам знать, если он все-таки происходит.

Возможно, вам понадобится включить alphaf_uv обратно в целочисленный тип, в зависимости от ваших потребностей.

+1

Быстрый вопрос, используя двойную волю, это влияет на точность? то я скажу, например, 0,159, чтобы удвоить (0,159) = 0,16? – user481610 2014-03-19 20:07:58

0

Возможно, f_uv - это объект с «значением консоли», возвращаемым методом .toString(). В этом случае вам может понадобиться поле f_uv as (int).

5

Большой ключ здесь заключается в следующем:

альфа определяется мной и f_uv получается из некоторых пикселей в формате PNG изображения.

Это в значительной степени означает, что данные f_uv подходит как uint8. Команда WHOS проверит. Когда вы определяете это в командной строке, по умолчанию векторы будут двойными. Вот почему вы видите разницу в поведении между «идентичными» матрицами.

+0

Спасибо за подсказку команды `whos`. – beardc 2012-02-20 02:59:49