如何计算两个二元向量的外积

时间:2015-03-24 18:52:07

标签: matlab matrix

我正在生成一个随机二进制矩阵,每行有一个特定数量的1。现在,我想取矩阵中的每一行并乘以它的转置(即row1'*row1)。

所以,我使用row1=rnd_mat(1,:)获取第一行。但是,在乘法步骤中我得到此错误

  

“两个逻辑输入必须是标量。要计算元素TIMES,请改用TIMES(。*)。”

知道我不想按元素计算,我想使用外部产品生成矩阵。我尝试使用row1手动编写[0 0 1 ...],并尝试查找外部产品。我设法得到了我想要的矩阵。

那么,有没有人对如何做到这一点有一些想法?

1 个答案:

答案 0 :(得分:2)

MATLAB不支持logical矩阵或向量的矩阵乘法。这就是你得到这个错误的原因。在尝试执行该操作之前,您需要将矩阵转换为double或其他有效的数字输入。因此,做这样的事情:

rnd_mat = double(rnd_mat); %// Cast to double
row1 = rnd_mat(1,:);
result = row1.'*row1;

你基本上计算的是两个向量的外积。如果您想避免转换为double,请考虑使用bsxfun为您完成工作:

result = bsxfun(@times, row1.', row1);

这样,您不需要在执行外部产品之前投射矩阵。请记住,两个向量的外积只是两个矩阵的逐元素乘法,其中一个矩阵由行向量组成,其中每行是行向量的副本,而另一个矩阵是列向量,其中每列是列向量的副本。

bsxfun自动广播每个行向量和列向量,以便我们生成两个兼容维度的矩阵,并按元素乘法执行元素,从而生成外部乘积。