2008-11-22 7 views
7

Ich habe diese zwei Vektoren:Numerische Typen Fehler, wenn zwei 2 Vektoren in MATLAB Multiplikation

alpha = 
    1 1 1 1 1 1 1 1 1 

f_uv = 
    193 193 194 192 193 193 190 189 191 

Und wenn ich dies tun:

alphaf_uv = alpha * f_uv' 

ich die Fehlermeldung:

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

Der interessante Teil ist, dass dieser Fehler nicht erscheint, wenn ich die gleichen Vektoren in der Konsole definieren und die Multiplikation dort versuchen.

alpha wird von mir definiert und f_uv wird von einigen Pixeln in einem PNG-Bild erhalten.

Antwort

16

Unter der Annahme, dass sie beide ganzzahlige Matrizen sind, kann f_uv' nicht sein.

Versuchen:

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

und lassen Sie uns wissen, ob es immer noch auftritt.

Möglicherweise müssen Sie danach alphaf_uv wieder in einen Integer-Typ zurückverwandeln, abhängig von Ihren Anforderungen.

+1

Schnelle Frage durch Verwendung von double beeinflusst dies die Genauigkeit? d. h. werde ich von sagen wir 0,159 zu double (0,159) = 0,16? – user481610

0

Vielleicht ist f_uv ein Objekt mit "console value", das von einer .toString() -Methode zurückgegeben wird. In diesem Fall müssen Sie möglicherweise f_uv als (int) eingeben.

5

Der große Schlüssel hier ist diese:

alpha von mir definiert und F_UV wird von einigen Pixeln in einem PNG-Bild erhalten.

Dies bedeutet stark, dass die F_UV Daten in als uint8 kommt. Der WHOS-Befehl wird überprüft. Wenn Sie dies in der Befehlszeile definieren, sind die Vektoren standardmäßig Double. Deshalb sehen Sie den Unterschied im Verhalten zwischen "identischen" Matrizen.

+0

Danke für den 'whos' Befehlstipp. – beardc