I guess I should have explained my problem clearer. If I run the code without w[1,(w[1].<z)&(w[1].>-(z))] = 0, and do: dump(w) Array{Any}((2,)) 1: Array{Float64}((1,13)) [-0.681392 0.595298 … 0.893845 -3.5044] 2: Float64 22.447679788630705
and println(w[1]) [-0.681392 0.595298 -0.394906 0.776983 -1.11178 3.11679 -0.0984956 -2.18501 0.928204 -0.484802 -1.86844 0.893845 -3.5044] println(w[1,1]) [-0.681392 0.595298 -0.394906 0.776983 -1.11178 3.11679 -0.0984956 -2.18501 0.928204 -0.484802 -1.86844 0.893845 -3.5044] println(w[1,:]) Any[ [-0.681392 0.595298 -0.394906 0.776983 -1.11178 3.11679 -0.0984956 -2.18501 0.928204 -0.484802 -1.86844 0.893845 -3.5044]] This is very confusing for an R user like me. How do I access the column indexes of w[1] and apply the logical expression w[1,(w[1].<z)&(w[1].>-(z))] = 0 ? Patrik On Thursday, November 17, 2016 at 6:58:14 AM UTC+1, Jeffrey Sarnoff wrote: > good things to know about how indexing works > > > The indices for a Vector, or a column or row of a Matrix start at *1* > > ``` > length(avector) # gets the number of elements in avector > > avector[1] # gets the first item in avector > avector[end] # gets the final item in avector > avector[1:end] # gets all elements of avector > > int_column_vector = [10, 20, 30] > 10 > 20 > 30 > > int_column_vector[1] > 10 > # do not use zero as an index > int_column_vector[ 0 ] > ERROR: BoundsError: > # do not use false, true as indices because avec[ false ] means avec[ 0 ] > > ``` > > in ` w[1,(w[1].<z)&(w[1].>-(z))] = 0 `, the second index can simplify to > `false` (consider this) > ``` > avec = [ 10, 20, 30 ] > avec1 = avec[ 1 ] > avec1 == avec[ 1 + false ] > avec2 = avec[ 2 ] > avec2 == avec[ 1 + true ] > ``` > > As a start, recheck indexing expressions, be more sure they do what you > want them to do. > > > On Wednesday, November 16, 2016 at 1:36:57 PM UTC-5, Patrik Waldmann wrote: >> >> Hi, >> >> I'm an R user trying to learn Julia. I got hold of some code from the >> Knet package that I was playing around with. My goal is to set values to >> zero in a loop based on a logical expression, but I cannot figure out how >> the indexing works. Any help would be appreciated (the problem lies in >> w[1,(w[1].<z)&(w[1].>-(z))] = 0): >> >> using Knet >> predict(w,x) = w[1]*x .+ w[2] >> lambda = 2 >> z = Array{Float64}(1,13) >> loss(w,x,y) = sumabs2(y - predict(w,x)) / size(y,2) >> lossgradient = grad(loss) >> function train(w, data; lr=.1) >> for (x,y) in data >> dw = lossgradient(w, x, y) >> z[:] = lr * lambda >> w[1] -= lr * dw[1] >> w[2] -= lr * dw[2] >> w[1,(w[1].<z)&(w[1].>-(z))] = 0 >> end >> return w >> end >> url = " >> https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data >> " >> rawdata = readdlm(download(url)) >> x = rawdata[:,1:13]' >> x = (x .- mean(x,2)) ./ std(x,2) >> y = rawdata[:,14:14]' >> w = Any[ 0.1*randn(1,13), 0 ] >> niter = 25 >> lossest = zeros(niter) >> for i=1:niter; train(w, [(x,y)]); lossest[i]=loss(w,x,y); end >> >> >> Best regards, >> >> Patrik >> >