Search code examples
pythonarraysconcatenation2d

How to concat corresponding elements (which are integers) of two 2D arrays of the same shape?


I have two 10x8 arrays, C and D. I need to concat the corresponding elements of these two arrays and store the result in another 10x8 array. For example, if C = [[1, 2, 3, 4, 5, 6, 7, 8],[9, 10, 11, 12, 13, 14, 15, 16],[8 elements],... [10th row which has 8 elements]] and D = [[100, 99, 98, 97, 96, 95, 94, 93],[92, 90, 89, 88, 87, 86, 85, 84],[8 elements],... [10th row which has 8 elements]]. I need another 10x8 array, E, which looks like E = [[1100, 299, 398, 497, 596, 695, 794, 893], [992, 1090, 1189, 1288, 1387, 1486, 1585, 1684],... [10th row which contains concatenation of the corresponding 8 elements in the 10th row of C and D]]. How do I obtain this? Appreciate your help!


Solution

  • Nested list comprehension:

    >>> C = [[1, 2, 3, 4, 5, 6, 7, 8],[9, 10, 11, 12, 13, 14, 15, 16]]
    >>> D = [[100, 99, 98, 97, 96, 95, 94, 93],[92, 90, 89, 88, 87, 86, 85, 84]]
    >>> [[int(f'{c}{d}') for c, d in zip(lc, ld)] for lc, ld in zip(C, D)]
    [[1100, 299, 398, 497, 596, 695, 794, 893],
     [992, 1090, 1189, 1288, 1387, 1486, 1585, 1684]]
    

    Just for fun, here is a functional solution:

    >>> from functools import partial
    >>> from itertools import starmap
    >>> list(map(list, map(partial(map, int), map(partial(starmap, '{0}{1}'.format), map(zip, C, D)))))
    [[1100, 299, 398, 497, 596, 695, 794, 893],
     [992, 1090, 1189, 1288, 1387, 1486, 1585, 1684]]