Reputation: 2819
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?
Upvotes: 13
Views: 31010
Reputation: 3008
one more way:
Look for array.shape:
if it comes like (2,) means digit at first place but nothing after after comma,its 1D. Else if it comes like (2,10) means two digits with comma,its 2D. Similarly how many digits available with comma, that many dimensional array it is.
Simple "array.shape" will help you know that.
Upvotes: 0
Reputation: 2938
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
Upvotes: 1
Reputation: 880777
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))
Upvotes: 18