If I understand, you want:
 pt_l::Vector{Float64}
in your definition, which is equivalent to:
 pt_l::Array{Float64,1}

Vector is just an alias for a 1-dimensional array.  Somewhere in base 
julia, there's a line that looks something like:
typealias Vector{T} Array{T,1}


When you're constructing TUnit, you can't do it by splatting one giant 
vector "generators[j,:]...".  You'll have to pass in "pt_l" as its own 
argument, so you can control that it's a Vector{Float64}.




On Wednesday, June 10, 2015 at 11:02:52 AM UTC-4, Michela Di Lullo wrote:
>
> Thank you very much Tom. 
>
> I tried the way you say, but I still get an error: 
>
> *ERROR: `convert` has no method matching convert(::Type{Float64}, 
> ::Array{Float64,2})*
>
> * in TUnit at no file*
>
> * in anonymous at no file:11*
>
>
> Is it correct the way I define pt_l in TUnit? 
>
>
> immutable TUnit
>
>     Node::Int16
>
>     a::Float64
>
>     b::Float64
>
>     c::Float64
>
>     inf::Float64
>
>     sup::Float64
>
>     ton::Int16
>
>     toff::Int16
>
>     storia0::Int16
>
>     pt0::Float64
>
>     rampa_up::Float64
>
>     rampa_dwn::Float64
>
>     rampa_up_str::Float64
>
>     rampa_dwn_str::Float64
>
>     SUC_C::Float64
>
>     tau_max::Int16
>
>     #pt_l::Array{Float64,7}
>
>     pt_l::Matrix{Float64}
>
>     #pt_l::Array{Float64,2}
>
>     storia0UP::Float64
>
>     storia0DW::Float64
>
>     u0::Float64
>
>     ton0::Float64
>
>     toff0::Float64
>
>     #function foo(args)
>
>     #    #function body
>
>     #end
>
> end
>
> 2015-06-10 16:36 GMT+02:00 Tom Breloff <[email protected] <javascript:>>:
>
>> I can't be completely sure of your goal and why you can't use a loop, but 
>> if you need to create those matrices/vectors, this is much cleaner:
>>
>> gmax = size(generators, 1)
>> hmax = size(nodeload, 1)
>> inf, sup, ton, toff, storia0 = [generators[:,i] for i in 5:9]
>>
>> # pt_l here will be a Matrix{Float64} (which is equivalent to 
>> Array{Float64,2})
>> pt_l = inf .+ (sup - inf) * (0:num_PC-1)' / (num_PC-1)   # note: the ".+" 
>> operator broadcasts the column 
>>                                                          # vector inf to 
>> the (gmax x num_PC) matrix
>>
>> # the following will be Vector{Float64} (which is equivalent to 
>> Array{Float64,1})
>> storia0UP = max(storia0, 0.0)  # there's a version of max/min which 
>> operate on vectors... no need to use comprehensions
>> storia0DW = min(storia0, 0.0)
>> u0 = float(map(x -> x>0, storia0))   # mapping an anonymous function to 
>> the vector, then converting a Vector{Bool} to Vector{Float64} which are 1's 
>> and 0's
>>
>> bound0 = x -> max(0.0, min(x, hmax))   # attaching an anonymous function 
>> to a variable
>> ton0 = map(bound0, (ton - storia0UP) .* u0)   # mapping that function
>> toff0 = map(bound0, (toff - storia0DW) .* (1.0 - u0))
>>
>> # note you can splat the row from generators first then fill in the 
>> remaining args
>> # no need to do the "cat" step (plus you should use hcat instead of 
>> cat(2, ...))
>> tunits = [TUnit(generators[j,:]..., vec(pt_l[j,:]), storia0UP[j], 
>> storia0DW[j], u0[j], ton0[j], toff0[j]) for j in 1:gmax]
>>
>>
>> However I still thing you should do:
>>
>> tunits = TUnit[]
>> for j in 1:gmax
>>  pt_l = ???
>>  storia0UP = ???
>>  storia0DW = ???
>>  u0 = ???
>>  ton0 = ???
>>  toff0 = ???
>>
>>  push!(tunits, TUnit(generators[j,:]..., pt_l, storia0UP, storia0DW, u0, 
>> ton0, toff0))
>> end
>>
>> Let me know if you have any questions.
>>
>>
>>
>>
>> On Wednesday, June 10, 2015 at 8:16:10 AM UTC-4, Michela Di Lullo wrote:
>>>
>>> I still get an error......
>>>
>>> Let's try again.. 
>>>
>>>     num_PC=7
>>>
>>>     immutable TUnit
>>>     Node::Int16
>>>     a::Float64
>>>     b::Float64
>>>     c::Float64
>>>     inf::Float64
>>>     sup::Float64
>>>     ton::Int16
>>>     toff::Int16
>>>     storia0::Int16
>>>     pt0::Float64
>>>     rampa_up::Float64
>>>     rampa_dwn::Float64
>>>     rampa_up_str::Float64
>>>     rampa_dwn_str::Float64
>>>     SUC_C::Float64
>>>     tau_max::Int16
>>>     pt_l::Float64
>>>     storia0UP::Float64
>>>     storia0DW::Float64
>>>     u0::Float64
>>>     ton0::Float64
>>>     toff0::Float64
>>> end
>>>
>>> generators = readdlm("$MyDataPath/gen" * "$NumBuses" * "_" * 
>>> "$GenInstance" * ".dat") *#matrix of dimension 6*16*
>>> nodeload   = readdlm("$MyDataPath/nodeload" * "$NumBuses" * "_" * 
>>> "$NodeloadInstance" * ".dat")
>>>
>>>     gmax=int(size(generators,1))
>>>     hmax=int(size(nodeload,2))
>>>     inf=generators[1:size(generators,1),5]
>>>     sup=generators[1:size(generators,1),6]
>>>     storia0=generators[1:size(generators,1),9]
>>>     ton=generators[1:size(generators,1),7]
>>>     toff=generators[1:size(generators,1),8]
>>>
>>>     #here below I'm computing some other quantities, I want to add as 
>>> attributes of the object TUnit, 
>>>     #together with the ones in generators:
>>>
>>>     *pt_l=([inf[j]+(r-1)*(sup[j]-inf[j])/(num_PC-1) for j=1:gmax, 
>>> r=1:num_PC]) #matrix of dimensions (gmax=6)*(num_PC=7)*
>>> *    storia0UP =  [max(storia0[j],0) for j=1:gmax] #vector of dimensions 
>>> (gmax=6)*1*
>>> *    storia0DW = -[min(storia0[j],0) for j=1:gmax] **#vector of 
>>> dimensions (gmax=6)*1*
>>> *    u0=[(storia0[j] > 0 ? 1 : 0) for j=1:gmax] **#vector of dimensions 
>>> (gmax=6)*1*
>>> *    ton0 = int16([min(hmax, max(0,(ton[j]-storia0UP[j])*u0[j])) for 
>>> j=1:gmax]) **#vector of dimensions (gmax=6)*1*
>>> *    toff0= int16([min(hmax, max(0,(toff[j]-storia0DW[j])*(1-u0[j]))) 
>>> for j=1:gmax]) **#vector of dimensions (gmax=6)*1*
>>>
>>>     generators = cat(2, generators, pt_l, storia0UP, storia0DW, u0, 
>>> ton0, toff0) #matrix of dimensions (gmax=6)*28
>>>
>>>     TUnitS = Array(TUnit,size(generators,1))
>>>
>>>     for j in 1:size(generators,1)
>>>         TUnitS[j]   = TUnit(generators[j,1:end]...)
>>>     end
>>>
>>> and I get:
>>>
>>> *ERROR: `TUnit` has no method matching TUnit(::Float64, ::Float64, 
>>> ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, 
>>> ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, 
>>> ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, 
>>> ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Int64, ::Int16, 
>>> ::Int16)*
>>>
>>> * in anonymous at no file:5*
>>>
>>> How could I specify that pt_l, attribute of the object TUnit, is a 
>>> Matrix and not a vector? 
>>>
>>> Thanks in advance for any suggestion, 
>>>
>>> Michela 
>>>
>>>
>>>
>>>
>>>
>>> Il giorno martedì 9 giugno 2015 18:54:56 UTC+2, Tom Breloff ha scritto:
>>>>
>>>> Seems like this would be much easier in a loop, rather than creating 
>>>> lots of temporaries only to extract them out later.
>>>> tunits = TUnit[]
>>>> for i in size(generators,1)
>>>>  pt_I = # create vector
>>>>  storia0UP = # create Float64
>>>>  # set other vars
>>>>  push!(tunits, TUnit(generators[j,:]..., pt_I, storia0UP, <other vars
>>>> >))
>>>> end
>>>>
>>>>
>>>> On Tuesday, June 9, 2015 at 11:37:37 AM UTC-4, Michela Di Lullo wrote:
>>>>>
>>>>>
>>>>>
>>>>>     num_PC=7
>>>>>     generators = readdlm("$MyDataPath/gen" * "$NumBuses" * "_" * 
>>>>> "$GenInstance" * ".dat")
>>>>>     
>>>>>     inf=generators[1:size(generators,1),5]
>>>>>     sup=generators[1:size(generators,1),6]
>>>>>     pt_l=([inf[j]+(r-1)*(sup[j]-inf[j])/(num_PC-1) for j=1:gmax, 
>>>>> r=1:num_PC])
>>>>>     storia0=generators[1:size(generators,1),9]
>>>>>     ton=generators[1:size(generators,1),7]
>>>>>     toff=generators[1:size(generators,1),8]
>>>>>     storia0UP =  [max(storia0[j],0) for j=1:gmax]
>>>>>     storia0DW = -[min(storia0[j],0) for j=1:gmax]
>>>>>     u0=[(storia0[j] > 0 ? 1 : 0) for j=1:gmax]
>>>>>     ton0 = int16([min(hmax, max(0,(ton[j]-storia0UP[j])*u0[j])) for 
>>>>> j=1:gmax])
>>>>>     toff0= int16([min(hmax, max(0,(toff[j]-storia0DW[j])*(1-u0[j]))) 
>>>>> for j=1:gmax])
>>>>>
>>>>>     generators = cat(2, generators, pt_l, storia0UP, storia0DW, u0, 
>>>>> ton0, toff0)
>>>>>
>>>>>     immutable TUnit
>>>>>     Node::Int16
>>>>>     a::Float64
>>>>>     b::Float64
>>>>>     c::Float64
>>>>>     inf::Float64
>>>>>     sup::Float64
>>>>>     ton::Int16
>>>>>     toff::Int16
>>>>>     storia0::Int16
>>>>>     pt0::Float64
>>>>>     rampa_up::Float64
>>>>>     rampa_dwn::Float64
>>>>>     rampa_up_str::Float64
>>>>>     rampa_dwn_str::Float64
>>>>>     SUC_C::Float64
>>>>>     tau_max::Int16
>>>>>     pt_l
>>>>>     storia0UP::Float64
>>>>>     storia0DW::Float64
>>>>>     u0::Float64
>>>>>     ton0::Float64
>>>>>     toff0::Float64
>>>>>     end
>>>>>
>>>>>     TUnitS = Array(TUnit,size(generators,1))
>>>>>
>>>>>     for j in 1:size(generators,1)
>>>>>         TUnitS[j]   = TUnit(generators[j,1:end]...)
>>>>>     end
>>>>>
>>>>>     
>>>>>
>>>>
>

Reply via email to