将.dat文件读入MATLAB变量

将.dat文件读入MATLAB变量,matlab,networkx,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 =

我已经使用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]
i、 conn是一个数字,Adj是(应该是)一个50乘50的矩阵,pos是一个50乘2的矩阵

我可以读取conn和Adj作为MATLAB变量,但是读取pos有困难。第一个实例从数据{1}{2508}开始,是

data{1}{2508} 
>>> [0.7832623541518583,
我如何把它塞进一个50乘2(或2乘50)的矩阵

阅读我使用的形容词

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:2
index=2508
但是我得到了NaN,因为.dat文件的行(字段?)不仅仅是值,它们的形式是
[val,
,val]
,您可以先删除所有不想要的字符

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
=