Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if an array is 2D

Tags:

python

numpy

I read from a file with loadtxt like this

data = loadtxt(filename) # id x1 y1 x2 y2

data could look like

array([[   4.      ,  104.442848, -130.422137,  104.442848,  130.422137],
   [   5.      ,    1.      ,    2.      ,    3.      ,    4.      ]])

I can then reduce data to the lines belonging to some id number:

d = data [ data[:,0] == id] 

The problem here is when the data contain only one line.

So my question is how to check the 2-dimensionality of my array data?

I tried checking

data.shape[0]  # num of lines

but for one-liners I get something like (n, ), so this will not work.

Any ideas how to do this correctly?

like image 397
Tengis Avatar asked Nov 24 '12 19:11

Tengis


2 Answers

data.ndim gives the dimension (what numpy calls the number of axes) of the array.


As you already have observed, when a data file only has one line, np.loadtxt returns a 1D-array. When the data file has more than one line, np.loadtxt returns a 2D-array.

The easiest way to ensure data is 2D is to pass ndmin=2 to loadtxt:

data = np.loadtxt(filename, ndmin=2)

The ndmin parameter was added in NumPy version 1.6.0. For older versions, you could use np.atleast_2d:

data = np.atleast_2d(np.loadtxt(filename))

like image 76
unutbu Avatar answered Sep 19 '22 11:09

unutbu


You can always check the dimension of your array with len(array) function.

Example1:

data = [[1,2],[3,4]]
if len(data) == 1:
   print('1-D array')
if len(data) == 2:
   print('2-D array')
if len(data) == 3:
   print('3-D array')

Output:

2-D array

And if your array is a Numpy array you can check dimension with len(array.shape).

Example2:

import Numpy as np
data = np.asarray([[1,2],[3,4]])
if len(data.shape) == 1:
   print('1-D array')
if len(data.shape) == 2:
   print('2-D array')
if len(data.shape) == 3:
   print('3-D array')

Output:

2-D array
like image 43
imanzabet Avatar answered Sep 21 '22 11:09

imanzabet