如何检查数组是否为2D

时间:2012-11-24 19:15:15

标签: python numpy

我从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, )的内容,所以这不起作用。

任何想法如何正确地做到这一点?

3 个答案:

答案 0 :(得分:13)

data.ndim给出了数组的维度(numpy称为axes的数量)。


正如您已经观察到的,当数据文件只有一行时,np.loadtxt 返回一维数组。当数据文件有多行时,np.loadtxt 返回一个二维数组。

确保data为2D的最简单方法是将ndmin=2传递给loadtxt

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

在NumPy 1.6.0版中添加了ndmin参数。对于旧版本, 你可以使用np.atleast_2d

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

答案 1 :(得分:0)

另一种方法:

寻找array.shape:

如果它像(2,)表示数字在首位,但在逗号后则为1D。 否则,如(2,10)表示两个数字用逗号表示,则为2D。 同样,逗号有多少个数字可用,即有多少维数组。

简单的“ array.shape”将帮助您了解这一点。

答案 2 :(得分:-1)

您始终可以使用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