Я нахожусь в ситуации, когда мне нужно переписать некоторый код Julia в код Python, и я не могу воспроизвести эту строку.
if 1 in array1[array2] || 1 in array1[array3]
Насколько я понимаю, эта строка сравнивает массивы array1
с array2
и array1
с array3
, чтобы увидеть, равен ли индекс array2
из array1
1
или индекс array3
из array1
равен 1
.
Итак, я воспроизвел этот код в код Python с моим пониманием,
for i, j in zip(array2, array3):
if array1[i] == 1 or array1[j] == 1:
Но этот код не работал, как приведенный выше код, и я получил ValueError, как показано ниже:
ValueError: значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any() или a.all()
Я не уверен, что это мое непонимание строки Джулии или мой код Python неверен.
Может ли кто-нибудь сказать мне, что не так?
[править]: Вот код Джулии этой проблемы. здесь я использую сеть клубов карате в качестве входной матрицы 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)