将.dat文件读入MATLAB变量
我已经使用neworkx在50个节点上生成了一个随机几何图形,并创建了一个带有该网络某些属性的.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 =
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
和=