矢量矩阵乘法
问题描述:
我试图乘以矩阵的第一列。我曾尝试这样的代码:矢量矩阵乘法
A = imread('cameraman.tif');
x0 = A(:,1);
y = A*x0;
,但我得到了以下错误:
Error using * MTIMES is not fully supported for integer classes. At least one input must be scalar. To compute elementwise TIMES, use TIMES (.*) instead.
,当我我的代码更改为:y = A.*x0;
我再次得到:
Error using .* Matrix dimensions must agree.
当我使用whos
命令,我得到这个: A是一个256x256矩阵和x0是一个256x1矩阵。我不知道我的代码有什么问题。
答
imread
正在返回整数值。您必须首先将它们转换为浮点数与double
执行乘法之前:
A = imread('cameraman.tif');
% Explicitly convert from integer datatype to double
A = double(A);
% NOW perform your multiplication
y = A * A(:,1);
去看待whos
重要的是这是在“类别”列中的数据类型:
A = imread('cameraman.tif');t
whos('A')
% Name Size Bytes Class Attributes
%
% A 256x256 65536 uint8
答
您需要将矩阵转换为双精度或单精度。
Ad = double(A);
或:
As = single(A);
由于这是一个图像矩阵,请注意,imshow预计值是在[0,255]范围为UINT和[0,1]的单/双。所以要么在显示之前退回到整数或缩放。
答
如前所述,您需要将数据转换为双精度。您可以使用功能im2double
来完成此操作。这个函数也会标准化数据。
a = uint8(randi([0,100],3,3))
b=im2double(a)
b*255
b(1,:)*b