чтение матричных данных с помощью readdlm в julia

#julia

#julia

Вопрос:

Я пытался построить график сети цитирования cora с помощью julia. Структура данных выглядит следующим образом,

 1 9 1
1 436 1
1 545 1
4 198 1
4 464 1
4 602 1
...
 

ребро строится из идентификатора узла первой строки в идентификатор узла второй строки. а третья строка указывает вес ребра. в этом наборе данных все ребра имеют вес 1. cora имеет 2708 узлов, 5429 ребер.

и я написал код Julia, как показано ниже,

 function MatrixMarketRead(filename)
     A = readdlm(filename)
     A = A[4:end,1:3]
    return sparse( round(Int64,A[:,1]), round(Int64,A[:,2]), convert(Array{Float64},A[:,3]))
end

dir  = "dataset/"
ln = "cora.mtx"
A = MatrixMarketRead(string(dir,strip(ln)));

print(size(A))
 

и вывод был

(2708,2706)

это должно быть в форме (2708, 2708), но результат был таким. Я не уверен, почему это произошло. как я должен это исправить?

Комментарии:

1. Возможно, вместо этого рассмотрите LightGraphs.jl (возможно, вместе с MetaGraphs.jl).

2. Но код должен быть правильным. Вы пробовали что-то вроде maximum(A[:, 2]) проверки того, действительно ли присутствуют все значения? Если нет, то вы sparse не можете волшебным образом сделать вывод, что матрица квадратична. Но тогда вы можете использовать конструктор с пятью аргументами.

3. @phipsgabler спасибо за ваши советы. судя по выводам, этот набор данных, скорее всего, не содержит всех идентификаторов узлов в строке или столбце. но что вы подразумеваете под конструктором с пятью arugument?

4. sparse(A[:, 1], A[:, 2], A[:, 3], 2708, 2708) .

5. О, почти уверен, да. Это действительно древнее.

Ответ №1:

Как отметил phipsgabler в комментариях, обновление до более новой версии Julia будет первым шагом для решения этой проблемы. Смотрите здесь https://julialang.org/downloads / для получения подробной информации о начале работы с последней версией.