【问题标题】:Reading a .dat file into MATLAB variables将 .dat 文件读入 MATLAB 变量
【发布时间】:2014-11-19 18:14:11
【问题描述】:

我使用neworkx 在50 个节点上生成了一个随机几何图形,并创建了一个包含该网络某些属性的.dat 文件。

我需要将这些作为 MATLAB 变量进行访问。我使用以下命令将文件作为数据字符串读取:

fid = fopen('mydata.dat','r')
data = textscan(fid, '%s')
fclose(fid)

数据文件结构如下

conn = val
Adj = val ..... val
      .............
      val ......val
pos = 
[0.7910629988376467, 0.5523474928588686]
...
[0.6799716933198028, 0.6981655240935597]

即conn 是一个数字,Adj 是(假设是)一个 50 x 50 的矩阵,pos 是一个 50 x 2 的矩阵。

我可以将 conn 和 Adj 读取为 MATLAB 变量,但我无法读取 pos.第一个实例从 data{1}{2508} 开始,是

data{1}{2508} 
>>> [0.7832623541518583,

我如何将它塞入一个 50 x 2(或 2 x 50)矩阵?

阅读我使用的 Adj

P = 50 %number of nodes
index = 5

for i=1:P
    for j = 1:P
        Adj(i,j) = str2double(data{1}(index + P*(i-1) +j))
    end
end

我认为类似的东西适用于 pos,但使用 j = 1:2index = 2508 但我得到的是 NaN,因为我的 .dat 文件的行(字段?)不仅仅是值,它们是形成[val,,val]

【问题讨论】:

    标签: matlab networkx


    【解决方案1】:

    您可以先删除所有不想拥有的字符。

    data = regexprep(data{1},'[\[\],]','');
    

    之后,您的循环应该会成功。但是,您可以使用数组函数来加速您的代码。

    找出pos的出现

    ind = find(strcmp(data,'pos')); # Should be 2506 in your case
    

    之后,一旦你知道你的数组是50x2,使用:

    pos = str2double(reshape(data(pos+2:end),2,50)')
    

    注意,+2 用于 pos=

    【讨论】:

      猜你喜欢
      • 2015-09-26
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      相关资源
      最近更新 更多