Concatenating empty array in Numpy Concatenating empty array in Numpy python python

Concatenating empty array in Numpy


if you know the number of columns before hand:

>>> xs = np.array([[1,2,3,4,5],[10,20,30,40,50]])>>> ys = np.array([], dtype=np.int64).reshape(0,5)>>> ysarray([], shape=(0, 5), dtype=int64)>>> np.vstack([ys, xs])array([[  1.,   2.,   3.,   4.,   5.],       [ 10.,  20.,  30.,  40.,  50.]])

if not:

>>> ys = np.array([])>>> ys = np.vstack([ys, xs]) if ys.size else xsarray([[ 1,  2,  3,  4,  5],       [10, 20, 30, 40, 50]])


If you wanna do this just because you cannot concatenate an array with an initialized empty array in a loop, then just use a conditional statement,e.g.

if (i == 0):    do the first assignmentelse:     start your contactenate 


Something that I've build to deal with this sort of problem. It's also deals with list input instead of np.array:

import numpy as npdef cat(tupleOfArrays, axis=0):    # deals with problems of concating empty arrays    # also gives better error massages    # first check that the input is correct    assert isinstance(tupleOfArrays, tuple), 'first var should be tuple of arrays'    firstFlag = True    res = np.array([])    # run over each element in tuple    for i in range(len(tupleOfArrays)):        x = tupleOfArrays[i]        if len(x) > 0:  # if an empty array\list - skip            if isinstance(x, list):  # all should be ndarray                x = np.array(x)            if x.ndim == 1:  # easier to concat 2d arrays                x = x.reshape((1, -1))            if firstFlag:  # for the first non empty array, just swich the empty res array with it                res = x                firstFlag = False            else:  # actual concatination                # first check that concat dims are good                if axis == 0:                    assert res.shape[1] == x.shape[1], "Error concating vertically element index " + str(i) + \                                                       " with prior elements: given mat shapes are " + \                                                       str(res.shape) + " & " + str(x.shape)                else:  # axis == 1:                    assert res.shape[0] == x.shape[0], "Error concating horizontally element index " + str(i) + \                                                       " with prior elements: given mat shapes are " + \                                                       str(res.shape) + " & " + str(x.shape)                res = np.concatenate((res, x), axis=axis)    return resif __name__ == "__main__":    print(cat((np.array([]), [])))    print(cat((np.array([1, 2, 3]), np.array([]), [1, 3, 54+1j]), axis=0))    print(cat((np.array([[1, 2, 3]]).T, np.array([]), np.array([[1, 3, 54+1j]]).T), axis=1))    print(cat((np.array([[1, 2, 3]]).T, np.array([]), np.array([[3, 54]]).T), axis=1))  # a bad one