One more tuple question -- I am trying to find a tuple associated with a minimum x[n].
So taking let's say tuplearray = [(3,2,1),(1,2,3),(3,1,2)] I want to to find the min x[2] for x in tuplearray minx2tuple = (3,1,2) Using the method Kevin showed above, I can unpack the tuples to get three element arrays x1array,x2array,x3array = collect(zip(tuplearray...)) Then, I can do minx2 = minimum(x2array) to get minx2 = 1 However, if I do a comprehension, [x for x in tuplearray if x[2] == minx2] or [x for x in tuplearray if x[2] == 1] this comprehension does not work. The error I get is -- ERROR: syntax: unexpected "]". How can I fix the comprehension to make it work in Julia? Thanks, Wally On Friday, July 25, 2014 11:05:45 AM UTC-4, [email protected] wrote: > > Ah, thank you! > > This Google group community is fantastic. > > On Thursday, July 24, 2014 6:32:19 PM UTC-4, Kevin Squire wrote: >> >> Hi there, >> >> In regards to a), I keep on getting the error message with the second >>> option >>> ERROR: type: apply: expected Function, got (Int64,Int64,Int64) >>> >> >> I'm guessing you accidentally redefined the symbol "tuple" to a tuple: >> >> julia> tuple(testtuple...,testvar) >> (1,2,3,4) >> >> julia> tuple = (1,2,3) >> Warning: imported binding for tuple overwritten in module Main >> (1,2,3) >> >> julia> tuple(testtuple...,testvar) >> ERROR: type: apply: expected Function, got (Int64,Int64,Int64) >> >> >> For your second example, zip(tuplearray...) is actually about right. >> The main differences from what you want are >> >> 1) it returns an iterator, not a set of arrays >> 2) the iterator yields tuples, not arrays >> >> julia> zip(tuplearray) >> >> Zip{(Array{(Int64,Int64,Int64),1},)}(([(1,2,3),(10,20,30),(100,200,300)],)) >> >> julia> collect(zip(tuplearray...)) >> 3-element Array{(Int64,Int64,Int64),1}: >> (1,10,100) >> (2,20,200) >> (3,30,300) >> >> Cheers, >> Kevin >> >> >> Just making sure, are you using 0.3? If so, hmm, I would be a bit stumped >>> as to why the same line is not working for me. >>> >>> On Thursday, July 24, 2014 5:30:44 PM UTC-4, Leah Hanson wrote: >>> >>>> a) Your second option works for me: >>>> ~~~ >>>> julia> testtuple = (1,2,3) >>>> (1,2,3) >>>> >>>> julia> testvar = 4 >>>> 4 >>>> >>>> julia> tuple(testtuple...,testvar) >>>> (1,2,3,4) >>>> ~~~ >>>> >>>> b) I'm not sure what the cleanest code for your example would be, but >>>> here's one possibility: >>>> >>>> ~~~ >>>> julia> tuplearray = [(1,2,3),(10,20,30),(100,200,300)] >>>> 3-element Array{(Int64,Int64,Int64),1}: >>>> (1,2,3) >>>> (10,20,30) >>>> (100,200,300) >>>> >>>> julia> aarray = Int[] >>>> 0-element Array{Int64,1} >>>> >>>> julia> barray = Int[] >>>> 0-element Array{Int64,1} >>>> >>>> julia> carray = Int[] >>>> 0-element Array{Int64,1} >>>> >>>> julia> for (a,b,c) in tuplearray >>>> push!(aarray,a) >>>> push!(barray,b) >>>> push!(carray,c) >>>> end >>>> >>>> julia> aarray >>>> 3-element Array{Int64,1}: >>>> 1 >>>> 10 >>>> 100 >>>> >>>> julia> barray >>>> 3-element Array{Int64,1}: >>>> 2 >>>> 20 >>>> 200 >>>> >>>> julia> carray >>>> 3-element Array{Int64,1}: >>>> 3 >>>> 30 >>>> 300 >>>> ~~~ >>>> >>>> If would be faster to pre-allocate the arrays (to the length of the >>>> tuplearray), and then just put the elements in at the correct indices, but >>>> I'm not sure if that matters for your application. >>>> >>>> -- Leah >>>> >>>> >>>> >>>> On Thu, Jul 24, 2014 at 4:15 PM, <[email protected]> wrote: >>>> >>>>> Hi all, >>>>> >>>>> I thought to just add to my previous thread, but created a new one >>>>> because the topic is a bit different. Hope y'all don't mind. >>>>> >>>>> Anyhow: >>>>> >>>>> a) How would I concatenate two tuples? Or a tuple with a variable? >>>>> >>>>> Say I have >>>>> >>>>> testtuple = (1,2,3) >>>>> testvar = 4 >>>>> >>>>> and want to get >>>>> >>>>> newtuple = (1,2,3,4) >>>>> >>>>> (not ((1,2,3),4) >>>>> >>>>> I've tried >>>>> newtuple = tuple(testtuple...,testvar...) >>>>> newtuple = tuple(testtuple...,testvar) >>>>> newtuple = testtuple...,testvar >>>>> >>>>> but none of those have worked to produce the desired result. >>>>> >>>>> b) I have an array of tuples >>>>> >>>>> tuplearray = [(a1,b1,c1),(a2,b2,c2)...,(an,bn,cn)] >>>>> >>>>> How could I then unpack the array into >>>>> >>>>> aarray = [a1,a2...,an] >>>>> barray = [b1,b2...,bn] >>>>> carray = [c1,c3...,cn] >>>>> >>>>> such that each position in the tuple gets unpacked into a >>>>> corresponding individual array? >>>>> >>>>> In Python, I would use >>>>> >>>>> alist,blist,clist = zip(*tuplelist) >>>>> >>>>> It appears that >>>>> >>>>> aarray,barray,carray = zip(tuplearray...) >>>>> >>>>> is not the Julia equivalent. >>>>> >>>>> My version of Julia is the .3 RC. >>>>> >>>>> Thanks for your help >>>>> >>>> >>>> >>
