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
>

Reply via email to