Saya berada dalam situasi di mana saya harus menulis ulang beberapa kode Julia ke dalam kode Python dan saya tidak dapat mereproduksi baris ini.
if 1 in array1[array2] || 1 in array1[array3]
Dalam pemahaman saya, baris ini membandingkan array array1
ke array2
dan array1
ke array3
, untuk melihat apakah indeks array2
dari array1
adalah 1
atau indeks array3
dari array1
adalah 1
.
Jadi, saya mereproduksi kode ini menjadi kode python dengan pemahaman saya,
for i, j in zip(array2, array3):
if array1[i] == 1 or array1[j] == 1:
Tetapi kode ini tidak berfungsi seperti kode di atas dan saya mendapat ValueError seperti di bawah ini:
ValueError: Nilai kebenaran array dengan lebih dari satu elemen bersifat ambigu. Gunakan a.any() atau a.all()
Saya tidak yakin apakah ini kesalahpahaman saya terhadap baris Julia atau kode Python saya salah.
Bisakah seseorang memberi tahu saya apa yang salah?
[sunting]: Ini kode Julia untuk masalah ini. di sini saya menggunakan jaringan klub karate sebagai matriks masukan dir = to/your/path ln = soc-karate.mtx
mtx = MatrixMarketRead(string(dir,strip(ln)));
A = mtx - spdiagm(diag(mtx))
n = size(A,1);
A = speye(n) - A * spdiagm(1./vec(sum(A,1)));
println(A)
function findDegrees(Ac::SparseMatrixCSC)
degrees = zeros(Int,length(Ac.colptr)-1)
for i = 1:length(degrees)
degrees[i] = Ac.colptr[i+1]-Ac.colptr[i]-1
end
return degrees
end
function lowDegreeNodes(A::SparseMatrixCSC,At::SparseMatrixCSC,d::Int64,dout::Vector,din::Vector)
# 1: find low degree nodes
n = size(A,1)
U = collect(dout.==1)
println(U)
V = collect(din.==1)
Z = min((dout+din) .>= 1 , (dout+din) .<= 8 )
# 2: visited = 0 ==> NotVisited
# = 1 ==> FNode
# = 2 ==> NotEliminated
visited = zeros(length(U))
for u = 1:n
if Z[u]
if visited[u] == 0
Au = A.rowval[ A.colptr[u]:A.colptr[u+1]-1 ]
Av = At.rowval[ At.colptr[u]:At.colptr[u+1]-1 ]
if 1 in visited[Au] || 1 in visited[Av]
visited[u] = 2
else
visited[Au] = 2
visited[u] = 1
end
end
end
if V[u]
if visited[u] == 0
Au = A.rowval[ A.colptr[u]:A.colptr[u+1]-1 ]
Av = At.rowval[ At.colptr[u]:At.colptr[u+1]-1 ]
if 1 in visited[Au] || 1 in visited[Av]
visited[u] = 2
else
visited[Av] = 2
visited[u] = 1
end
end
end
if U[u]
if visited[u] == 0
Au = A.rowval[ A.colptr[u]:A.colptr[u+1]-1 ]
Av = At.rowval[ At.colptr[u]:At.colptr[u+1]-1 ]
if 1 in visited[Au] || 1 in visited[Av]
visited[u] = 2
else
visited[Av] = 2
visited[u] = 1
end
end
end
end
return visited .== 1
end
dout = findDegrees(A)
din = findDegrees(A')
z = lowDegreeNodes(A, A', 3, dout, din)