'Merge two numpy arrays

I am trying to merge two arrays with the same number of arguments.

Input:

first = [[650001.88, 300442.2,   18.73,  0.575,  650002.094, 300441.668, 18.775],
         [650001.96, 300443.4,   18.7,   0.65,   650002.571, 300443.182, 18.745],
         [650002.95, 300442.54,  18.82,  0.473,  650003.056, 300442.085, 18.745]]

second = [[1],
          [2],
          [3]]

My expected output:

final = [[650001.88, 300442.2,   18.73,  0.575,  650002.094, 300441.668, 18.775, 1],
         [650001.96, 300443.4,   18.7,   0.65,   650002.571, 300443.182, 18.745, 2],
         [650002.95, 300442.54,  18.82,  0.473,  650003.056, 300442.085, 18.745, 3]]

To do that I create simple loop:

for i in first:
        for j in second:
            final += np.append(j, i)

I got i filling that i missing something. First of all my loop i extremely slow. Secondly my data is quite have i got more than 2 mlns rows to loop. So I tried to find faster way for example with this code:

final = [np.append(i, second[0]) for i in first] 

It working far more faster than previous loop but its appending only first value of second array. Can you help me?



Solution 1:[1]

Use np.column_stack:

import numpy as np

first = [[650001.88, 300442.2,   18.73,  0.575,  650002.094, 300441.668, 18.775],
         [650001.96, 300443.4,   18.7,   0.65,   650002.571, 300443.182, 18.745],
         [650002.95, 300442.54,  18.82,  0.473,  650003.056, 300442.085, 18.745]]

second = [[1],
          [2],
          [3]]

np.column_stack([first, second])

If you need it as a list, use the method tolist:

np.column_stack([first, second]).tolist()

Solution 2:[2]

Multiply a 5x3 matrix by a 3x2 matrix (real matrix product)

import numpy as np
np_1= np.arange(15).reshape(5,3)
np_1

Solution 3:[3]

For this case, hstack (because second is already 2D) and c_ (because it concatenates along the second axis) would also work. In fact c_ would work even if second is shape (3,), as long as its length matches the length of first.

Assuming first and second are already numpy array objects:

out = np.c_[first, second]

or

out1 = np.hstack((first, second))

Output:

assert (out == np.array(final)).all() & (out == out1).all()

That being said, all are just different ways of using np.concatenate.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Vincent Taing
Solution 3