向量矩阵乘法

时间:2016-08-01 20:35:22

标签: matlab matrix

我试图将Matrix乘以其第一列。我试过这段代码:

A = imread('cameraman.tif');
x0 = A(:,1);
y = A*x0;

但是我收到以下错误:

  

使用*时出错   整数类不完全支持MTIMES。至少一个输入必须是标量。   要计算元素TIMES,请改用TIMES(。*)。

当我将代码更改为:y = A.*x0;时,我得到:

  

使用时出错。*   矩阵维度必须一致。

当我使用whos命令时,我得到了这个: A是256x256矩阵,x0是256x1矩阵。我不知道我的代码有什么问题。

3 个答案:

答案 0 :(得分:2)

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查看的重要事项是" Class"中列出的数据类型。柱:

A = imread('cameraman.tif');t
whos('A')

%      Name           Size               Bytes  Class     Attributes
%    
%      A            256x256              65536  uint8 

答案 1 :(得分:1)

如前所述,您需要将数据转换为双精度。您可以使用函数im2double执行此操作。此功能也将标准化数据。

a = uint8(randi([0,100],3,3))
b=im2double(a)
b*255
b(1,:)*b

答案 2 :(得分:0)

您需要将矩阵转换为double或single。

Ad = double(A);

或:

As = single(A);

由于这是一个图像矩阵,请注意,imshow期望uint的值为[0,255],单/双值的值为[0,1]。因此要么在显示之前转换为整数或缩放。