Currently Julia only drops trailing singleton dimensions in indexing. So if 
F is n-by-m-by-k, then F[:, i, :] is n-by-1-by-k. You need to use reshape 
or squeeze to convert that to an n-by-k 2-dimensional matrix.

Note that writing code in this direct-port slicing style is going to 
involve a lot of unnecessary copying and not perform very well, especially 
not if the arrays are large. Just something to be aware 
of. 
http://www.johnmyleswhite.com/notebook/2013/12/22/the-relationship-between-vectorized-and-devectorized-code/
 
is relevant here.


On Friday, August 21, 2015 at 7:27:49 PM UTC-7, [email protected] wrote:
>
> R code below changed to Julia code. It is always error. I do not know how 
> to change R code below to Julia code correctly? Thank you.
> #R code
> forward <- function(G.I,Tr,Pr)
> {
>     n.samp <- dim(G.I)[1]
>     n.mark <- dim(G.I)[2]
>     F <- G.I
>     F[,1,] <- sweep(G.I[,1,],2,Pr,"*")
>     for (i in 2:n.mark)
>     {
>          F[,i,] <- G.I[,i,]*(F[,i-1,]%*%Tr)
>          S <- F[,i,1] + F[,i,2] + F[,i,3]
>          F[,i,] <- sweep(F[,i,],1,S,"/")
>     }
>     return(F)
> }
> #error julia code
> function forward(GI::Array,Tr::Array,Pr::Array)
>         nsamp = size(GI,1)
> nmark = size(GI,2)
> F = GI
> F[:,1,:] = broadcast(*,Pr,GI[:,1,:])  #error
> for i=2:nmark
>       F[:,i,:] = GI[:,i,:].*(F[:,i-1,:]*Tr)  #error
>       S = F[:,i,1] + F[:,i,2] + F[:,i,3]  #error
>       F[:,i,:] = broadcast(/,S',F[:,i,:])  #error
> end
> return F
> end
>

Reply via email to