【问题标题】:Matrix multiplication MATLAB矩阵乘法 MATLAB
【发布时间】:2018-03-21 12:02:57
【问题描述】:

所以也许我想多了,把它弄得一团糟……

我在 MATLAB 中有一个有向图。我需要将其更改为无向图以使用最小生成树对其进行评估(对吗?它不适用于有向图)。我有一个表示重复的 nx1 二进制矩阵(1 是唯一的,0 是重复的),我的 node-node-edgeweight 矩阵的形式是 nx3.看来我的有向边在两个方向上都是相同的,因此将其更改为无向边应该没有什么区别。

如何使用二进制的列向量将主矩阵中的所有三列重复归零,这样它只会显示无向边?

另外,如果我缺少另一种方法,我会喜欢的!

【问题讨论】:

  • 你能提供一个你想要获得什么的最小例子吗?
  • 对不起,我正在这里工作。但这里的想法是:[1;0;1] × [3 3 2; 5 4 1; 8 2 2] 会给我 [3 3 2; 0 0 0; 8 2 2]
  • 那么您只是在寻找x.'.*yx.*y 吗? (其中 ..* 表示逐元素乘法)

标签: matlab graph digraphs


【解决方案1】:

从你的例子:

vect = [1;0;1]; % n x 1
mat  = [3 3 2; 5 4 1; 8 2 2]; % n x p

第一个想法

out = repmat(vect,1,size(mat,2)).*mat; 

第二个想法

out = mat;
out(find(~vect),:) = 0;

对于 MATLAB >= r2007a

(来自Chris Luengo comment

out = bsxfun(@times,vect,mat)

对于 MATLAB >= r2016b

(来自Chris Luengo comment

out = mat.*vect

【讨论】:

  • 而不是repmat,更喜欢bsxfunbsxfun(@times,vect,mat)。在较新版本的 MATLAB 和 Octave 中,您可以简单地执行 vect.*mat,单例维度的隐式扩展。
  • 我不知道。阅读 mathworks,版本 >= 2016b 是这样。
  • 我总是忘记哪些版本引入了新功能,所以我只说“较新的版本”并试图摆脱它。 :p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多