Re: [julia-users] fill! with copies

2014-05-18 Thread Carlos Becker
Thanks all, those look like neat solutions.


--
Carlos


On Fri, May 16, 2014 at 11:36 PM, Stefan Karpinski wrote:

> When you write fill!(arr, ChannVals()) you are asking to fill arr with
> the one value that is the result of evaluating ChannVals() once. Doing
> anything else would be bizarre. We could have a version of fill! that takes
> a thunk so you could write
>
> fill!(arr) do
>   ChannVals()
> end
>
>
> That would have the desired effect as well, but it seems to me that using
> a comprehension is just as easy in that case.
>
>
> On Fri, May 16, 2014 at 4:21 PM, Ivar Nesje  wrote:
>
>> @Jameson They are immutable, but they contain references to mutable
>> arrays, and all the immutable types will reference the same arrays. That
>> way you would not just need a copy but a deepcopy. That will probably be
>> too much overhead for fill!(), and will be problematic if someone decided
>> to fill! an array with some large structure.
>>
>> On the other hand, I think it would be reasonable for fill! to take a
>> shallow copy of mutable types. Not sure what others think on that subject
>> though.
>>
>> Ivar
>>
>> kl. 17:01:56 UTC+2 fredag 16. mai 2014 skrev Jameson følgende:
>>>
>>> Since they are immutable, fill! did exactly what you wanted
>>>
>>> On Friday, May 16, 2014, Tim Holy  wrote:
>>>
 Try

 arr = [ChannVals() for i = 1:10]

 On Friday, May 16, 2014 01:27:18 AM Carlos Becker wrote:
 > Hello all,
 >
 > I wanted to create an array of an immutable type and initialize an
 empty
 > copy in each (with the default constructor).
 > I am wondering which is the best way to do it, so far:
 >
 >immutable ChannVals
 > taus::Vector{Float64}
 > alphas::Vector{Float64}
 >
 > ChannVals() = new( Float64[], Float64[] )
 >end
 >
 ># create 10 new instances
 >arr = ChannVals[ChannVals() for i=1:10]
 >
 >
 > Now, a neat but incorrect way is to do
 >
 >arr = Array( ChannVals, 10 )
 >fill!(allVals, ChannVals())
 >
 > because it will fill them with the same instance.
 > Is there a neat way, such as a fillwithcopies!() ?
 >
 >
 > Cheers.

>>>
>


Re: [julia-users] fill! with copies

2014-05-16 Thread Stefan Karpinski
When you write fill!(arr, ChannVals()) you are asking to fill arr with the
one value that is the result of evaluating ChannVals() once. Doing anything
else would be bizarre. We could have a version of fill! that takes a thunk
so you could write

fill!(arr) do
  ChannVals()
end


That would have the desired effect as well, but it seems to me that using a
comprehension is just as easy in that case.


On Fri, May 16, 2014 at 4:21 PM, Ivar Nesje  wrote:

> @Jameson They are immutable, but they contain references to mutable
> arrays, and all the immutable types will reference the same arrays. That
> way you would not just need a copy but a deepcopy. That will probably be
> too much overhead for fill!(), and will be problematic if someone decided
> to fill! an array with some large structure.
>
> On the other hand, I think it would be reasonable for fill! to take a
> shallow copy of mutable types. Not sure what others think on that subject
> though.
>
> Ivar
>
> kl. 17:01:56 UTC+2 fredag 16. mai 2014 skrev Jameson følgende:
>>
>> Since they are immutable, fill! did exactly what you wanted
>>
>> On Friday, May 16, 2014, Tim Holy  wrote:
>>
>>> Try
>>>
>>> arr = [ChannVals() for i = 1:10]
>>>
>>> On Friday, May 16, 2014 01:27:18 AM Carlos Becker wrote:
>>> > Hello all,
>>> >
>>> > I wanted to create an array of an immutable type and initialize an
>>> empty
>>> > copy in each (with the default constructor).
>>> > I am wondering which is the best way to do it, so far:
>>> >
>>> >immutable ChannVals
>>> > taus::Vector{Float64}
>>> > alphas::Vector{Float64}
>>> >
>>> > ChannVals() = new( Float64[], Float64[] )
>>> >end
>>> >
>>> ># create 10 new instances
>>> >arr = ChannVals[ChannVals() for i=1:10]
>>> >
>>> >
>>> > Now, a neat but incorrect way is to do
>>> >
>>> >arr = Array( ChannVals, 10 )
>>> >fill!(allVals, ChannVals())
>>> >
>>> > because it will fill them with the same instance.
>>> > Is there a neat way, such as a fillwithcopies!() ?
>>> >
>>> >
>>> > Cheers.
>>>
>>


Re: [julia-users] fill! with copies

2014-05-16 Thread Ivar Nesje
@Jameson They are immutable, but they contain references to mutable arrays, 
and all the immutable types will reference the same arrays. That way you 
would not just need a copy but a deepcopy. That will probably be too much 
overhead for fill!(), and will be problematic if someone decided to fill! 
an array with some large structure.

On the other hand, I think it would be reasonable for fill! to take a 
shallow copy of mutable types. Not sure what others think on that subject 
though.

Ivar

kl. 17:01:56 UTC+2 fredag 16. mai 2014 skrev Jameson følgende:
>
> Since they are immutable, fill! did exactly what you wanted
>
> On Friday, May 16, 2014, Tim Holy > wrote:
>
>> Try
>>
>> arr = [ChannVals() for i = 1:10]
>>
>> On Friday, May 16, 2014 01:27:18 AM Carlos Becker wrote:
>> > Hello all,
>> >
>> > I wanted to create an array of an immutable type and initialize an empty
>> > copy in each (with the default constructor).
>> > I am wondering which is the best way to do it, so far:
>> >
>> >immutable ChannVals
>> > taus::Vector{Float64}
>> > alphas::Vector{Float64}
>> >
>> > ChannVals() = new( Float64[], Float64[] )
>> >end
>> >
>> ># create 10 new instances
>> >arr = ChannVals[ChannVals() for i=1:10]
>> >
>> >
>> > Now, a neat but incorrect way is to do
>> >
>> >arr = Array( ChannVals, 10 )
>> >fill!(allVals, ChannVals())
>> >
>> > because it will fill them with the same instance.
>> > Is there a neat way, such as a fillwithcopies!() ?
>> >
>> >
>> > Cheers.
>>
>

Re: [julia-users] fill! with copies

2014-05-16 Thread Jameson Nash
Since they are immutable, fill! did exactly what you wanted

On Friday, May 16, 2014, Tim Holy  wrote:

> Try
>
> arr = [ChannVals() for i = 1:10]
>
> On Friday, May 16, 2014 01:27:18 AM Carlos Becker wrote:
> > Hello all,
> >
> > I wanted to create an array of an immutable type and initialize an empty
> > copy in each (with the default constructor).
> > I am wondering which is the best way to do it, so far:
> >
> >immutable ChannVals
> > taus::Vector{Float64}
> > alphas::Vector{Float64}
> >
> > ChannVals() = new( Float64[], Float64[] )
> >end
> >
> ># create 10 new instances
> >arr = ChannVals[ChannVals() for i=1:10]
> >
> >
> > Now, a neat but incorrect way is to do
> >
> >arr = Array( ChannVals, 10 )
> >fill!(allVals, ChannVals())
> >
> > because it will fill them with the same instance.
> > Is there a neat way, such as a fillwithcopies!() ?
> >
> >
> > Cheers.
>


Re: [julia-users] fill! with copies

2014-05-16 Thread Tim Holy
Try

arr = [ChannVals() for i = 1:10]

On Friday, May 16, 2014 01:27:18 AM Carlos Becker wrote:
> Hello all,
> 
> I wanted to create an array of an immutable type and initialize an empty
> copy in each (with the default constructor).
> I am wondering which is the best way to do it, so far:
> 
>immutable ChannVals
> taus::Vector{Float64}
> alphas::Vector{Float64}
> 
> ChannVals() = new( Float64[], Float64[] )
>end
> 
># create 10 new instances
>arr = ChannVals[ChannVals() for i=1:10]
> 
> 
> Now, a neat but incorrect way is to do
> 
>arr = Array( ChannVals, 10 )
>fill!(allVals, ChannVals())
> 
> because it will fill them with the same instance.
> Is there a neat way, such as a fillwithcopies!() ?
> 
> 
> Cheers.


Re: [julia-users] fill! with copies

2014-05-16 Thread Carlos Becker
* correction, 'allVals'  is 'arr' in the last line of code.


--
Carlos


On Fri, May 16, 2014 at 10:27 AM, Carlos Becker wrote:

> Hello all,
>
> I wanted to create an array of an immutable type and initialize an empty
> copy in each (with the default constructor).
> I am wondering which is the best way to do it, so far:
>
>immutable ChannVals
> taus::Vector{Float64}
> alphas::Vector{Float64}
>
>  ChannVals() = new( Float64[], Float64[] )
>end
>
># create 10 new instances
>arr = ChannVals[ChannVals() for i=1:10]
>
>
> Now, a neat but incorrect way is to do
>
>arr = Array( ChannVals, 10 )
>fill!(allVals, ChannVals())
>
> because it will fill them with the same instance.
> Is there a neat way, such as a fillwithcopies!() ?
>
>
> Cheers.
>