#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 / для получения подробной информации о начале работы с последней версией.