2012-11-24 2 views
8

Я читаю из файла с loadtxt как этогоКак проверить, если массив 2D

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

data может выглядеть

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

, то я могу уменьшить data к линиям, принадлежащему некоторым id номер:

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

Проблема здесь, когда данные содержат только одну строку.

Так что мой вопрос в том, как проверить 2-мерность моего массива data?

Я попытался проверить

data.shape[0] # num of lines 

но для однострочных я получаю что-то вроде (n,), так что это не будет работать.

Любые идеи, как это сделать правильно?

ответ

13

data.ndim дает размер (количество звонков число axes).


Как вы уже заметили, когда файл данных содержит только одну строку, np.loadtxt возвращает 1D-массива. Когда файл данных имеет более одной строки, np.loadtxt возвращает 2D-массив.

Самый простой способ обеспечить data это 2D должен пройти ndmin=2 к loadtxt:

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

Параметр ndmin был добавлен в NumPy версии 1.6.0. Для более старых версий, можно использовать np.atleast_2d:

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

+0

Wow 50 секунд, чтобы получить ответ! Благодаря!! – Tengis

0

Вы всегда можете проверить размер вашего массива с len(array) функции.

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') 

Выход:

2-D array 

И если массив является массивом Numpy вы можете проверить размер с 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') 

Выход:

2-D array 
Смежные вопросы