I converted this .m file into Julia. When a vector gets updated inside a for loop and Julia crashes with this (incorrect) error message:
ERROR: LoadError: MethodError: no method matching diagm(::Array{Float64,2})
Closest candidates are:
diagm(::Union{BitArray{1},BitArray{2}}) at linalg/bitarray.jl:90
diagm{Tv,Ti}(::SparseMatrixCSC{Tv,Ti}) at sparse/sparsematrix.jl:3571
diagm{T}(::AbstractArray{T,1}) at linalg/dense.jl:121
…
in macro expansion; at /home/dean/src/ml/logistic.regression/ng/ex.04/ex4.jl:27 [inlined]
in anonymous at ./:?
in include_from_node1(::String) at ./loading.jl:488
while loading /home/dean/src/ml/logistic.regression/ng/ex.04/ex4.jl, in expression starting on line 17
The line that causes the problem is
theta = theta - H\grad
If I comment this line out the code runs. If I remove the loop and just execute the code in the loop once it runs. It’s not a problem with the diagm() function
I’m using Julia 0.5.1.
Have I done something wrong, or is this a bug? Here’s the code and data files:
x = readdlm(“ex4x.dat”)
y = readdlm(“ex4y.dat”)
xWithInt = hcat(ones(80), x)
nrows,ncols = size(xWithInt)
theta = zeros(ncols)
g(z) = 1.0 ./ (1.0 + exp(-z))
MAX_ITR = 7
J = zeros(MAX_ITR)
for i = 1:MAX_ITR
hypothesis
z = xWithInt * theta
h = g(z)
grad = (1/nrows) .* xWithInt’ * (h-y)
H = (1/nrows) .* xWithInt’ * diagm(h) * diagm(1-h) * xWithInt
Calculate J (for testing convergence)
J[i] =(1/nrows)sum(-y . log(h) - (1-y) .* log(1-h))
#J[1] =(1/nrows)sum(-y . log(h) - (1-y) .* log(1-h))
backslash operator is left division
theta = theta - H\grad
end
ex4x.dat
5.5500000e+01 6.9500000e+01
4.1000000e+01 8.1500000e+01
5.3500000e+01 8.6000000e+01
4.6000000e+01 8.4000000e+01
4.1000000e+01 7.3500000e+01
5.1500000e+01 6.9000000e+01
5.1000000e+01 6.2500000e+01
4.2000000e+01 7.5000000e+01
5.3500000e+01 8.3000000e+01
5.7500000e+01 7.1000000e+01
4.2500000e+01 7.2500000e+01
4.1000000e+01 8.0000000e+01
4.6000000e+01 8.2000000e+01
4.6000000e+01 6.0500000e+01
4.9500000e+01 7.6000000e+01
4.1000000e+01 7.6000000e+01
4.8500000e+01 7.2500000e+01
5.1500000e+01 8.2500000e+01
4.4500000e+01 7.0500000e+01
4.4000000e+01 6.6000000e+01
3.3000000e+01 7.6500000e+01
3.3500000e+01 7.8500000e+01
3.1500000e+01 7.2000000e+01
3.3000000e+01 8.1500000e+01
4.2000000e+01 5.9500000e+01
3.0000000e+01 6.4000000e+01
6.1000000e+01 4.5000000e+01
4.9000000e+01 7.9000000e+01
2.6500000e+01 6.4500000e+01
3.4000000e+01 7.1500000e+01
4.2000000e+01 8.3500000e+01
2.9500000e+01 7.4500000e+01
3.9500000e+01 7.0000000e+01
5.1500000e+01 6.6000000e+01
4.1500000e+01 7.1500000e+01
4.2500000e+01 7.9500000e+01
3.5000000e+01 5.9500000e+01
3.8500000e+01 7.3500000e+01
3.2000000e+01 8.1500000e+01
4.6000000e+01 6.0500000e+01
3.6500000e+01 5.3000000e+01
3.6500000e+01 5.3500000e+01
2.4000000e+01 6.0500000e+01
1.9000000e+01 5.7500000e+01> 5.5500000e+01 6.9500000e+01
4.1000000e+01 8.1500000e+01
5.3500000e+01 8.6000000e+01
4.6000000e+01 8.4000000e+01
4.1000000e+01 7.3500000e+01
5.1500000e+01 6.9000000e+01
5.1000000e+01 6.2500000e+01
4.2000000e+01 7.5000000e+01
5.3500000e+01 8.3000000e+01
5.7500000e+01 7.1000000e+01
4.2500000e+01 7.2500000e+01
4.1000000e+01 8.0000000e+01
4.6000000e+01 8.2000000e+01
4.6000000e+01 6.0500000e+01
4.9500000e+01 7.6000000e+01
4.1000000e+01 7.6000000e+01
4.8500000e+01 7.2500000e+01
5.1500000e+01 8.2500000e+01
4.4500000e+01 7.0500000e+01
4.4000000e+01 6.6000000e+01
3.3000000e+01 7.6500000e+01
3.3500000e+01 7.8500000e+01
3.1500000e+01 7.2000000e+01
3.3000000e+01 8.1500000e+01
4.2000000e+01 5.9500000e+01
3.0000000e+01 6.4000000e+01
6.1000000e+01 4.5000000e+01
4.9000000e+01 7.9000000e+01
2.6500000e+01 6.4500000e+01
3.4000000e+01 7.1500000e+01
4.2000000e+01 8.3500000e+01
2.9500000e+01 7.4500000e+01
3.9500000e+01 7.0000000e+01
5.1500000e+01 6.6000000e+01
4.1500000e+01 7.1500000e+01
4.2500000e+01 7.9500000e+01
3.5000000e+01 5.9500000e+01
3.8500000e+01 7.3500000e+01
3.2000000e+01 8.1500000e+01
4.6000000e+01 6.0500000e+01
3.6500000e+01 5.3000000e+01
3.6500000e+01 5.3500000e+01
2.4000000e+01 6.0500000e+01
1.9000000e+01 5.7500000e+01
3.4500000e+01 6.0000000e+01
3.7500000e+01 6.4500000e+01
3.5500000e+01 5.1000000e+01
3.7000000e+01 5.0500000e+01
2.1500000e+01 4.2000000e+01
3.5500000e+01 5.8500000e+01
2.6500000e+01 6.8500000e+01
2.6500000e+01 5.5500000e+01
1.8500000e+01 6.7000000e+01
4.0000000e+01 6.7000000e+01
3.2500000e+01 7.1500000e+01
3.9000000e+01 7.1500000e+01
4.3000000e+01 5.5500000e+01
2.2000000e+01 5.4000000e+01
3.6000000e+01 6.2500000e+01
3.1000000e+01 5.5500000e+01
3.8500000e+01 7.6000000e+01
4.0000000e+01 7.5000000e+01
3.7500000e+01 6.3000000e+01
2.4500000e+01 5.8000000e+01
3.0000000e+01 6.7000000e+01
3.3000000e+01 5.6000000e+01
5.6500000e+01 6.1000000e+01
4.1000000e+01 5.7000000e+01
4.9500000e+01 6.3000000e+01
3.4500000e+01 7.2500000e+01
3.2500000e+01 6.9000000e+01
3.6000000e+01 7.3000000e+01
2.7000000e+01 5.3500000e+01
4.1000000e+01 6.3500000e+01
2.9500000e+01 5.2500000e+01
2.0000000e+01 6.5500000e+01
3.8000000e+01 6.5000000e+01
1.8500000e+01 7.4500000e+01
1.6000000e+01 7.2500000e+01
3.3500000e+01 6.8000000e+01
3.4500000e+01 6.0000000e+01
3.7500000e+01 6.4500000e+01
3.5500000e+01 5.1000000e+01
3.7000000e+01 5.0500000e+01
2.1500000e+01 4.2000000e+01
3.5500000e+01 5.8500000e+01
2.6500000e+01 6.8500000e+01
2.6500000e+01 5.5500000e+01
1.8500000e+01 6.7000000e+01
4.0000000e+01 6.7000000e+01
3.2500000e+01 7.1500000e+01
3.9000000e+01 7.1500000e+01
4.3000000e+01 5.5500000e+01
2.2000000e+01 5.4000000e+01
3.6000000e+01 6.2500000e+01
3.1000000e+01 5.5500000e+01
3.8500000e+01 7.6000000e+01
4.0000000e+01 7.5000000e+01
3.7500000e+01 6.3000000e+01
2.4500000e+01 5.8000000e+01
3.0000000e+01 6.7000000e+01
3.3000000e+01 5.6000000e+01
5.6500000e+01 6.1000000e+01
4.1000000e+01 5.7000000e+01
4.9500000e+01 6.3000000e+01
3.4500000e+01 7.2500000e+01
3.2500000e+01 6.9000000e+01
3.6000000e+01 7.3000000e+01
2.7000000e+01 5.3500000e+01
4.1000000e+01 6.3500000e+01
2.9500000e+01 5.2500000e+01
2.0000000e+01 6.5500000e+01
3.8000000e+01 6.5000000e+01
1.8500000e+01 7.4500000e+01
1.6000000e+01 7.2500000e+01> 5.5500000e+01 6.9500000e+01
4.1000000e+01 8.1500000e+01
5.3500000e+01 8.6000000e+01
4.6000000e+01 8.4000000e+01
4.1000000e+01 7.3500000e+01
5.1500000e+01 6.9000000e+01
5.1000000e+01 6.2500000e+01
4.2000000e+01 7.5000000e+01
5.3500000e+01 8.3000000e+01
5.7500000e+01 7.1000000e+01
4.2500000e+01 7.2500000e+01
4.1000000e+01 8.0000000e+01
4.6000000e+01 8.2000000e+01
4.6000000e+01 6.0500000e+01
4.9500000e+01 7.6000000e+01
4.1000000e+01 7.6000000e+01
4.8500000e+01 7.2500000e+01
5.1500000e+01 8.2500000e+01
4.4500000e+01 7.0500000e+01
4.4000000e+01 6.6000000e+01
3.3000000e+01 7.6500000e+01
3.3500000e+01 7.8500000e+01
3.1500000e+01 7.2000000e+01
3.3000000e+01 8.1500000e+01
4.2000000e+01 5.9500000e+01
3.0000000e+01 6.4000000e+01
6.1000000e+01 4.5000000e+01
4.9000000e+01 7.9000000e+01
2.6500000e+01 6.4500000e+01
3.4000000e+01 7.1500000e+01
4.2000000e+01 8.3500000e+01
2.9500000e+01 7.4500000e+01
3.9500000e+01 7.0000000e+01
5.1500000e+01 6.6000000e+01
4.1500000e+01 7.1500000e+01
4.2500000e+01 7.9500000e+01
3.5000000e+01 5.9500000e+01
3.8500000e+01 7.3500000e+01
3.2000000e+01 8.1500000e+01
4.6000000e+01 6.0500000e+01
3.6500000e+01 5.3000000e+01
3.6500000e+01 5.3500000e+01
2.4000000e+01 6.0500000e+01
1.9000000e+01 5.7500000e+01
3.4500000e+01 6.0000000e+01
3.7500000e+01 6.4500000e+01
3.5500000e+01 5.1000000e+01
3.7000000e+01 5.0500000e+01
2.1500000e+01 4.2000000e+01
3.5500000e+01 5.8500000e+01
2.6500000e+01 6.8500000e+01
2.6500000e+01 5.5500000e+01
1.8500000e+01 6.7000000e+01
4.0000000e+01 6.7000000e+01
3.2500000e+01 7.1500000e+01
3.9000000e+01 7.1500000e+01
4.3000000e+01 5.5500000e+01
2.2000000e+01 5.4000000e+01
3.6000000e+01 6.2500000e+01
3.1000000e+01 5.5500000e+01
3.8500000e+01 7.6000000e+01
4.0000000e+01 7.5000000e+01
3.7500000e+01 6.3000000e+01
2.4500000e+01 5.8000000e+01
3.0000000e+01 6.7000000e+01
3.3000000e+01 5.6000000e+01
5.6500000e+01 6.1000000e+01
4.1000000e+01 5.7000000e+01
4.9500000e+01 6.3000000e+01
3.4500000e+01 7.2500000e+01
3.2500000e+01 6.9000000e+01
3.6000000e+01 7.3000000e+01
2.7000000e+01 5.3500000e+01
4.1000000e+01 6.3500000e+01
2.9500000e+01 5.2500000e+01
2.0000000e+01 6.5500000e+01
3.8000000e+01 6.5000000e+01
1.8500000e+01 7.4500000e+01
1.6000000e+01 7.2500000e+01
3.3500000e+01 6.8000000e+01
3.3500000e+01 6.8000000e+01
ex4y.dat
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
1.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00
0.0000000e+00