Чтение файла .dat в переменные MATLAB

Я использовал 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 и Adj как переменные MATLAB, но у меня проблемы с чтением pos. Первый экземпляр начинается с данных{1}{2508} и

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

Как мне втиснуть это в матрицу 50 на 2 (или 2 на 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:2 и index = 2508, но я получаю NaN, поскольку строки (поля?) моего файла .dat не просто значения, они имеют форму [val, или ,val]


person Tom Kealy    schedule 19.11.2014    source источник


Ответы (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 и =.

person Nemesis    schedule 19.11.2014