2012-11-24 32 views
8

tôi đọc từ một tập tin với loadtxt như thế nàyLàm thế nào để kiểm tra xem một mảng là 2D

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

data có thể trông giống như

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

sau đó tôi có thể làm giảm data các dòng thuộc một số id số:

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

Vấn đề ở đây là khi nào dữ liệu chỉ chứa một dòng.

Vì vậy, câu hỏi của tôi là làm thế nào để kiểm tra 2 chiều của mảng của tôi data?

tôi đã cố gắng kiểm tra

data.shape[0] # num of lines 

nhưng đối với một lớp lót tôi nhận được một cái gì đó giống như (n,), vì vậy đây sẽ không hoạt động.

Bất kỳ ý tưởng nào về cách thực hiện điều này một cách chính xác?

Trả lời

13

data.ndim cung cấp thứ nguyên (gọi là số axes) của mảng.


Như bạn đã đã quan sát, khi một tập tin dữ liệu chỉ có một dòng, np.loadtxt lợi nhuận một 1D-mảng. Khi tệp dữ liệu có nhiều dòng, np.loadtxt trả về mảng 2D.

Cách dễ nhất để đảm bảo data là 2D là phải vượt qua ndmin=2-loadtxt:

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

Tham số ndmin đã được bổ sung trong phiên bản 1.6.0 NumPy. Đối với phiên bản cũ, bạn có thể sử dụng np.atleast_2d:

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

+0

Wow 50 giây để có được một câu trả lời! Cảm ơn!! – Tengis

0

Bạn luôn có thể kiểm tra kích thước của mảng của bạn với len(array) chức năng.

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 

Và nếu mảng của bạn là một mảng NumPy bạn có thể kiểm tra kích thước với len(array.shape).

Ví dụ 2:

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 
Các vấn đề liên quan