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

Matlab 如何计算两个二元向量的外积,matlab,matrix,Matlab,Matrix,我正在生成一个随机的二进制矩阵,每行有特定数量的1。现在,我想把矩阵中的每一行都乘以它的转置(即row1'*row1) 因此,我使用row1=rnd_mat(1,:)获取第一行。然而,在乘法步骤中,我得到了这个错误 两个逻辑输入都必须是标量。若要计算元素时间,请改用时间(.*) 知道我不想计算元素,我想用外积生成一个矩阵。我尝试使用[0 0 1…]手动编写行1,并尝试查找外部产品。我设法得到了我想要的矩阵 那么,有人对我如何做到这一点有什么想法吗?MATLAB不支持逻辑矩阵或向量的矩阵乘法。这就

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

因此,我使用
row1=rnd_mat(1,:)
获取第一行。然而,在乘法步骤中,我得到了这个错误

两个逻辑输入都必须是标量。若要计算元素时间,请改用时间(.*)

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


那么,有人对我如何做到这一点有什么想法吗?

MATLAB不支持逻辑矩阵或向量的矩阵乘法。这就是为什么你会犯这样的错误。在尝试执行该操作之前,您需要将矩阵转换为
双精度
或其他有效的数字输入。因此,请这样做:

rnd_mat = double(rnd_mat); %// Cast to double
row1 = rnd_mat(1,:);
result = row1.'*row1;
你要计算的是两个向量的外积。如果你想避免使用<代码>双< /代码>,请考虑使用它来代替你做这项工作:

result = bsxfun(@times, row1.', row1);
这样,在做外积之前,您不需要铸造矩阵。记住,两个向量的外积只是两个矩阵的元素相乘,其中一个矩阵由行向量组成,其中每行是行向量的副本,而另一个矩阵是列向量,其中每列是列向量的副本


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

查看两个向量的
大小。它们可能具有相同的方向,即两个行向量。要获取外积,需要一行一列向量。尝试使用
转置
@2个元素,我在乘法之前转置其中一个。row1=VecMat(1,:),row1T=row1',W=row1T*row1,非常感谢它的工作并产生了我想要的结果。@motaha-我的荣幸。如果你不再需要帮助,请考虑接受我的回答。这可以通过点击我的文章顶部的复选标记图标来实现,在向上和向下投票按钮的左侧下方。这会告诉StackOverflow社区,您不再需要这方面的帮助。祝你好运好的,我还有一个问题,但我将它发布在一个新的帖子中,很多人可以回答/从中受益,但关于这个问题,我很满意。@motaha-没问题。请继续并发布您的问题。很好的
bsxfun
解释!