user1123936
user1123936

Reputation: 181

How do I convert a 2D numpy array into a 1D numpy array of 1D numpy arrays?

In other words, each element of the outer array will be a row vector from the original 2D array.

Upvotes: 0

Views: 6086

Answers (4)

hpaulj
hpaulj

Reputation: 231335

np.vsplit Split an array into multiple sub-arrays vertically (row-wise).

x=np.arange(12).reshape(3,4)
In [7]: np.vsplit(x,3)
Out[7]: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

A comprehension could be used to reshape those arrays into 1d ones.

This is a list of arrays, not an array of arrays. Such a sequence of arrays can be recombined with vstack (or hstack, dstack).

np.array([np.arange(3),np.arange(4)])

makes a 2 element array of arrays. But if the arrays in the list are all the same shape (or compatible), it makes a 2d array. In terms of data storage it may not matter whether it is 2d or 1d of 1d arrays.

Upvotes: 0

sweetdream
sweetdream

Reputation: 1419

I had the same issue to append a raw with a different length to a 2D-array.

The only trick I found up to now was to use list comprenhsion and append the new row (see below). Not very optimal I guess but at least it works ;-)
Hope this can help

>>> x=np.reshape(np.arange(0,9),(3,3))
>>> x
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> row_to_append = np.arange(9,11)
>>> row_to_append
array([ 9, 10])
>>> result=[item for item in x]
>>> result.append(row_to_append)
>>> result
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8]), array([ 9, 10])]

Upvotes: 0

Saullo G. P. Castro
Saullo G. P. Castro

Reputation: 58875

A @Jaime already said, a 2D array can be interpreted as an array of 1D arrays, suppose:

a = np.array([[1,2,3],
              [4,5,6],
              [7,8,9]])

doing a[0] will return array([1, 2, 3]).

So you don't need to do any conversion.

Upvotes: 1

cachorrocadi
cachorrocadi

Reputation: 29

I think it makes little sense to use numpy arrays to do that, just think you're missing out on all the advantages of numpy.

Upvotes: 0

Related Questions