将.dat文件读入MATLAB变量

时间:2014-11-19 18:14:11

标签: matlab networkx

我使用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乘50的矩阵,pos是50乘2的矩阵。

我可以阅读conn,并调整MATLAB变量,但我在阅读pos时遇到问题。第一个实例从数据{1} {2508}开始,并且是

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

如何将其制作成50×2(或2×50)的矩阵?

要阅读Adj I,请使用

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,但是我的.dat文件的行(字段?)得到NaNs不是只是价值,他们是[val,,val]

形式的

1 个答案:

答案 0 :(得分: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=