【问题标题】:Matlab, load adjacency lists (irregular file)Matlab,加载邻接表(不规则文件)
【发布时间】:2015-07-28 21:43:50
【问题描述】:

我已经查看了herehere,但我不确定是否找到了我需要的东西。

我有一个看起来像这样的不规则文件(代表粒子 1 到 5 的邻居)

2 3 5
1 3
1 2

1

我想找出一种方法来加载它(作为称为A 的“东西”)并执行以下操作:

  1. 计算一行元素的数量(例如size(A(1,:))应该给我3
  2. 给定一个数组B(大小为 5),选择 B 的元素对应于一行给定的索引(类似B(A(1,:)) 的东西应该给我[B(2) B(3) B(5)]

【问题讨论】:

    标签: matlab


    【解决方案1】:

    由于您希望数组的大小取决于它们的第一个索引,因此您可能只剩下cells。您的单元格 A 可能是这样的 A{1} 等于 [2 3 5]A{2}[1 3] 在您的示例等中。为此,您可以通过

    阅读您的文件 infile
    fid=fopen(infile,'rt');
    A=[];
    while 1
        nextline=fgets(fid);
        if nextline==-1 %EOF reached
            break;
        end
        A{end+1}=sscanf(nextline,'%d');
    end
    fclose(fid);
    
    %demonstrate use for indexing
    B=randi(10,5,1);
    B(A{3}) %2-element vector
    B(A{4}) %empty vector
    

    那么A{i} 是一个向量,对应于你文件中的ith 行。如果该行为空,则它是空向量。您可以根据需要使用它来索引B,请参见上面的示例。请注意,您不应该在infile 的最后添加换行符,否则您将获得A 的虚假空元素。如果您事先知道需要阅读多少行,这不是问题。

    i 行中的条目数由length(A{i}) 给出,i=1:length(A)

    【讨论】:

    • 谢谢!我想我的问题是要了解什么是细胞......并且避免从textscanhere)获得NaNhere
    • 我不太喜欢细胞,它们对我来说非常违反直觉。例如,注意A(1)A{1},因为前者是一个包含单个向量的单元格,而后者是向量本身。
    猜你喜欢
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多