Potentially. It's worth experimenting with different approaches, profiling 
as you iterate with the code to get a feel for what are going to be 
idiomatic and high-performance methods of solving problems in Julia. Trying 
to port code directly from any significantly different language is not 
always a very effective strategy and can occasionally even lead to 
lower-performance code than what you started with, there are no guarantees 
of free speedups.


On Saturday, August 22, 2015 at 2:39:00 PM UTC-7, Sisyphuss wrote:
>
> Will `ArrayView` overcome the unnecessary copying?
>
>
>
> On Saturday, August 22, 2015 at 11:54:39 AM UTC+2, Tony Kelman wrote:
>>
>> 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