2012-11-24 67 views
8

我從文件中讀取與loadtxt這樣如何檢查是否一個數組是二維

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] 

這裏的問題是什麼時候數據只包含一行。

所以我的問題是如何檢查我的數組的二維性data

我試圖檢查

data.shape[0] # num of lines 

但對於單行我得到的東西像(n,),所以這是不行的。

任何想法如何正確地做到這一點?

回答

13

data.ndim給出了該數組的維數(numpy稱爲axes的數目)。


正如你已經看到,當數據文件只有一行,np.loadtxt 返回一維數組。當數據文件有多行時,np.loadtxt 返回一個2D數組。

確保data最簡單的方法是2D是通過ndmin=2loadtxt

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

ndmin參數在NumPy的1.6.0版本中加入。對於舊版本, 可以使用np.atleast_2d

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

+0

哇50秒得到答案!謝謝!! – Tengis

0

您可以隨時檢查您的陣列的尺寸與len(array)功能。

例1:

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)檢查尺寸。

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

輸出:

2-D array 
相關問題