我使用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:2
和index = 2508
,但是我的.dat文件的行(字段?)得到NaNs不是只是价值,他们是[val,
或,val]
答案 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
和=
。