47 lines
914 B
Python
47 lines
914 B
Python
from itertools import (chain)
|
|
|
|
|
|
# kronecker :: [[a]] -> [[a]] -> [[a]]
|
|
def kronecker(m1, m2):
|
|
return concatMap(
|
|
lambda row2: concatMap(
|
|
lambda elem2: [concatMap(
|
|
lambda num2: concatMap(
|
|
lambda num1: [num1 * num2],
|
|
elem2
|
|
),
|
|
m1[row2]
|
|
)],
|
|
m2
|
|
),
|
|
range(len(m2))
|
|
)
|
|
|
|
|
|
# concatMap :: (a -> [b]) -> [a] -> [b]
|
|
def concatMap(f, xs):
|
|
return list(
|
|
chain.from_iterable(
|
|
map(f, xs)
|
|
)
|
|
)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# Sample 1
|
|
r = [[1, 2], [3, 4]]
|
|
s = [[0, 5], [6, 7]]
|
|
|
|
# Sample 2
|
|
t = [[0, 1, 0], [1, 1, 1], [0, 1, 0]]
|
|
u = [[1, 1, 1, 1], [1, 0, 0, 1], [1, 1, 1, 1]]
|
|
|
|
# Result 1:
|
|
for row in kronecker(r, s):
|
|
print(row)
|
|
print()
|
|
|
|
# Result 2
|
|
for row in kronecker(t, u):
|
|
print(row)
|