【发布时间】:2015-05-26 17:37:00
【问题描述】:
对于格式设置和看似非常简单的问题,我深表歉意。我是 matlab 和这个堆栈交换的新手。我正在尝试从 matlab 中的几个列向量创建一个邻接矩阵。信息是从文本文件中导入的。信息看起来像这样。
X Y Z W
aa bb 1 aa
bb cc 2 bb
cc dd 3 cc
其中X 和Y 列是顶点列的名称。 Z 是重量。 X 和 Y 列有大约 30000 条目,有重复。 W 列是我图中的所有顶点,按字母顺序排序,不重复。
示例数据的输出应如下所示。
aa bb cc dd
aa 0 1 0 0
bb 1 0 2 0
cc 0 2 0 3
dd 0 0 3 0
如果顶点是数字的,我知道如何创建矩阵。但我不知道如何为W 列中的顶点分配数值并使所有内容仍然匹配。
如果所有列中的值都是数字,则此代码将起作用。
A = sparse([X; Y],[Y; X],[Z; Z]);
其中X, Y 和Z 是上面的列。当我尝试这个时,我得到以下错误
'Undefined function 'sparse' for input arguments of type 'cell'
【问题讨论】:
-
能否分享一下你到现在为止成功完成的代码。
-
请为您的示例数据添加您的预期输出。
-
您的定义不清楚。 X 和 Y 是顶点吗? W 也是“顶点”,按字母顺序排序?你的 X 和 Y 是按字母顺序排列的吗?数字作为字符串,还是某种标识符?如果 X 和 Y 是数字,那么 W 怎么会出现问题呢?您的声明没有使用W。它是做什么用的?也许数据的实际样本会有所帮助。
-
@Peter X、Y、Z 和 W 是列的名称。如果 X 和 Y 是数字,那么你是对的,W 没问题。 X 和 Y 未按字母顺序排序。我有 W 是因为我想为 X 和 Y 中的每个顶点分配一个数值。W 只是组织它们。
-
好的,看起来是这样。我已经写了一个答案。顺便说一句,
(aa,cc)条目不正确(我相信)。当前的X和Y输入中不存在(aa,cc)对。 编辑:也没有(cc,cc)对。