pythonarraysmatlabnumpy

Concatenating empty array in Numpy


in Matlab I do this:

>> E = [];
>> A = [1 2 3 4 5; 10 20 30 40 50];
>> E = [E ; A]

E =

     1     2     3     4     5
    10    20    30    40    50

Now I want the same thing in Numpy but I have problems, look at this:

>>> E = array([],dtype=int)
>>> E
array([], dtype=int64)
>>> A = array([[1,2,3,4,5],[10,20,30,40,50]])

>>> E = vstack((E,A))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/core/shape_base.py", line 226, in vstack
    return _nx.concatenate(map(atleast_2d,tup),0)
ValueError: array dimensions must agree except for d_0

I have a similar situation when I do this with:

>>> E = concatenate((E,A),axis=0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: arrays must have same number of dimensions

Or:

>>> E = append([E],[A],axis=0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/lib/function_base.py", line 3577, in append
    return concatenate((arr, values), axis=axis)
ValueError: arrays must have same number of dimensions

Solution

  • 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)
    >>> ys
    array([], 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 xs
    array([[ 1,  2,  3,  4,  5],
           [10, 20, 30, 40, 50]])