Re: help with lists operations
- To: mathgroup at smc.vnet.net
- Subject: [mg67840] Re: [mg67822] help with lists operations
- From: "Carl K. Woll" <carlw at wolfram.com>
- Date: Mon, 10 Jul 2006 06:37:47 -0400 (EDT)
- References: <200607090850.EAA24679@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
omk wrote:
> Hi ALL,
> I am a novice in Mathematica, know that there are no easy ways for learning, so spent 2 weeks trying to solve an easy problem, but so far have only ugly solutions.
> Yes, I read and reread the Book as well as searched for similar problems on the Forum.
> I have 2 lists:
> f1={{2, 1}, {3, 1}, {7, 2}, {9, 1}, {10, 1}, {12, 1}, {14, 3}, {19,
> 3}, {23, 1}, {24, 1}, {25, 1}}
> f2={{2, 2}, {5, 1}, {
> 6, 2}, {10, 1}, {14, 3}, {16, 1}, {18, 1}, {21, 3}, {22, 1}, {26, 1}}
> I need to compare sublists (pairs) from the first list f1 with pairs from f2.
> If pairs with 2 first equal numbers exist, I have to multiply the second, after having products for all such pairs, I need to receive their sum.
> Say from f1 and f2 I have {2,1} and {2,2}, the product is 1 2=2, similar {10,1} and {10,1},{14,3} and {14,3},
> so it should be 2+1+9=12
> Any ideas are very welcome
> TIA,
> omk
This seems like a good problem for sparse arrays. First, find the
maximum number you might try to compare (the maximum of the first
columns of f1 and f2):
In[6]:=
len=Max[f1[[All,1]], f2[[All,1]]]
Out[6]=
26
Now, create sparse arrays from f1 and f2. We need to convert the pairs
{int, int} to int -> int, which I do using Rule@@@f1. One could also use
something like f1 /. {a_Integer,b_Integer}->(a->b).
In[7]:=
sa1=SparseArray[Rule @@@ f1,len]
sa2=SparseArray[Rule @@@ f2,len]
Out[7]=
SparseArray[<11>, {26}]
Out[8]=
SparseArray[<10>, {26}]
Now, we just multiply and add:
In[9]:=
Total[sa1 sa2]
Out[9]=
12
Here is a function which puts the pieces together:
omk[f1_List, f2_List]:=Module[{len},
len = Max[ f1[[All,1]], f2[[All,1]] ];
Total[ SparseArray[Rule@@@f1, len] SparseArray[Rule@@@f2, len] ]
]
Test:
In[11]:=
omk[f1,f2]
Out[11]=
12
Carl Woll
Wolfram Research
- References:
- help with lists operations
- From: omk <omk@iname.com>
- help with lists operations