[julia-users] Re: Indexing problem
OK, that works fine. Thanks. I think it would be a good idea to drop the matlab-ism in future versions. Patrik On Thursday, November 17, 2016 at 11:51:09 AM UTC+1, Simon Byrne wrote: > I'm not familiar with the package in question, but this line: > > w = Any[ 0.1*randn(1,13), 0 ] > > may be what is causing the problem. It is creating a 2-element Vector, the > first element of which is a 1x13 Matrix, and the second element is a scalar > 0. The analogous object in R would be: > > W = list(matrix(0.1*rnorm(13),nrow=1), 0) > > In Julia, extraneous dimensions have an implicit index of 1 (this is a > matlab-ism, and may disappear in future), so w[1], w[1,1], w[1,1,1] are > all identical (and equivalent to W[[1]] in R). w[1,:] is a bit of an odd > case in that it returns a 1-element Vector containing a Matrix, but would > be equivalent to W[1] in R. > > I think what you may want is actually > > w[1][(w[1].-(z))] > > which can be written more clearly as > > w[1][-z .< w[1] .< z] > > > -Simon > > > > > > On Thursday, 17 November 2016 09:39:14 UTC, Patrik Waldmann wrote: >> >> I guess I should have explained my problem clearer. If I run the code >> without w[1,(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))] = 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))] = 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))] = 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))] = 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 >>>
[julia-users] Re: Indexing problem
I'm not familiar with the package in question, but this line: w = Any[ 0.1*randn(1,13), 0 ] may be what is causing the problem. It is creating a 2-element Vector, the first element of which is a 1x13 Matrix, and the second element is a scalar 0. The analogous object in R would be: W = list(matrix(0.1*rnorm(13),nrow=1), 0) In Julia, extraneous dimensions have an implicit index of 1 (this is a matlab-ism, and may disappear in future), so w[1], w[1,1], w[1,1,1] are all identical (and equivalent to W[[1]] in R). w[1,:] is a bit of an odd case in that it returns a 1-element Vector containing a Matrix, but would be equivalent to W[1] in R. I think what you may want is actually w[1][(w[1].-(z))] which can be written more clearly as w[1][-z .< w[1] .< z] -Simon On Thursday, 17 November 2016 09:39:14 UTC, Patrik Waldmann wrote: > > I guess I should have explained my problem clearer. If I run the code > without w[1,(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))] = 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))] = 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))] = 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))] = 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 >>> >>
[julia-users] Re: Indexing problem
I guess I should have explained my problem clearer. If I run the code without w[1,(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))] = 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))] = 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))] = 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))] = 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 >> >
[julia-users] Re: Indexing problem
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))] = 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))] = 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))] = 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 >