【问题标题】:Build weighted matrix in MATLAB with vectors在 MATLAB 中使用向量构建加权矩阵
【发布时间】:2017-02-19 20:52:25
【问题描述】:

我在使用 MATLAB 时遇到问题。我想创建一个巨大的邻接矩阵,为了实现这个结果,我编写了一些生成 3 个向量的代码:NodeXNodeYWeight

NodeX代表矩​​阵的行索引。

NodeY代表矩阵的列索引。

Weight 是一个包含权重的向量。

所有这些向量都放入一个.csv 文件中,MATLAB 非常容易读取该文件。但是当我创建矩阵时,我遇到了问题。这是我用来将索引与权重相关联的代码。

    for i=1:1:3873
    WeightedMatrix(NodeY(i), NodeX(i)) = Weight(i);
    end

我看到的结果对我来说有点奇怪。事实上,如果我这样做:

WeightedMatrix(NodeY(1), NodeX(1))

MATLAB 打印给我:

ans = 0.2483

这是权重向量中存在的值,但不是我想要的值。

如果我这样做:

Weight(1)

它返回ans = 1.2550(这是我想要的值)。

这三个向量例如是:

这是创建.csv 文件的最后部分:

tmp = set(Final)
tmp = tuple(tmp)
for z in tmp:
print str(z[0]) + "," + str(z[1]) + "," + str(z[2]) + "\n"

【问题讨论】:

  • WeightedMatrix(NodeY(1), NodeX(1)) 中,如果您想看到与Weight(1) 相同的结果,您不应该更改参数的顺序吗?
  • 不幸的是结果是一样的..谢谢
  • 我认为您应该分享您读取/生成三个向量的代码部分。
  • @erfan 我添加了最终代码。如果你想要所有的代码,请告诉我。
  • 如果你能成功读取所有3个向量NodeX、NodeY和Weigth,你能不能试试这个……:WMatrix = zeros(max(NodeX), max(NodeY));WMatrix(NodeX , NodeY) = Weigth

标签: matlab matrix vector indexing


【解决方案1】:

您可以将邻接矩阵形成为稀疏矩阵以防止内存问题:

WeightedMatrix_sp = sparse(NodeX, NodeY, Weight);

如果你有足够的内存,你可以将稀疏矩阵转换为密集矩阵:

WeightedMatrix = full(WeightedMatrix_sp);

【讨论】:

  • 谢谢,但这不是内存问题,我设法使结果只有一个而没有权重,但我的问题在于将权重与索引匹配。再次感谢您...
  • @RiccardoCelli 如果你想要一个而不是权重,请将你的条件添加到问题中。你可以写:WeightedMatrix =full(sparse(NodeX, NodeY, 1));
  • 不,我想要重量。问题不在于数字,而在于向量权重的元素。 :)
  • 我尝试使用您的方法,但结果与我提出的前两个不同,所以我认为它不适用于我的情况。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2015-02-23
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多