KOpyko
KOpyko

Reputation: 11

Python- Substract matrix

I need some help in order to write good code to substract matrix.

For example: sparse_matrices([{(1, 3): 2, (2, 7): 1}, {(1, 3): 6, (9,10): 7}, {(2,7): 0.5, (4,2): 10}])

Output:{(1, 3): -4, (2, 7): 0.5, (9, 10): -7, (4,2): -10}

I Dont want to use numpy

edit - copy from comment

lst=([{(1, 3): 2, (2, 7): 1}, {(1, 3): 6, (9,10): 7}, {(2,7): 0.5, (4,2): 10}]) 
A= lst[0] 
B= lst[1] 
C= lst[2] 
F={} 
for k, v in A.items(): 
    for k1,v1 in B.items(): 
         for k2,v2 in C.items(): 
              F[k] =(v-(B.get(k,0)+C.get(k,0))) 
print(F) 
>> {(1, 3): -4, (2, 7): 0.5}

Upvotes: 0

Views: 38

Answers (1)

hpaulj
hpaulj

Reputation: 231738

In [219]: lst=([{(1, 3): 2, (2, 7): 1}, {(1, 3): 6, (9,10): 7}, {(2,7): 0.5, (4,2): 10}])

Using defaultdict for convenience:

In [220]: from collections import defaultdict
In [221]: dd = defaultdict(int)
In [222]: dd
Out[222]: defaultdict(int, {})
In [223]: dd.update(lst[0])
In [224]: dd
Out[224]: defaultdict(int, {(1, 3): 2, (2, 7): 1})
In [225]: for adict in lst[1:]:
     ...:     for k,v in adict.items():
     ...:         dd[k] = dd[k]-v
     ...: 
In [226]: dd
Out[226]: defaultdict(int, {(1, 3): -4, (2, 7): 0.5, (9, 10): -7, (4, 2): -10})

With a regular dict we have to use a conditional get, that returns 0 if the key isn't found.

In [227]: dd = dict()
In [228]: dd.update(lst[0])
In [229]: for adict in lst[1:]:
     ...:     for k,v in adict.items():
     ...:         val = dd.get(k,0)
     ...:         dd[k] = val-v
     ...: 
In [230]: dd
Out[230]: {(1, 3): -4, (2, 7): 0.5, (9, 10): -7, (4, 2): -10}

Upvotes: 1

Related Questions