如何检查一个数组是否为二维数组

13

我用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.      ]])

我可以根据某些id号码,将data减少为与之对应的行:

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

问题在于数据只包含一行时的情况。

那么我的问题是如何检查数组data的二维性?

我尝试过检查。

data.shape[0]  # num of lines

但对于单行代码我得到类似于(n, )的结果,所以这样是行不通的。

有什么正确的思路吗?

3个回答

18

data.ndim 返回数组的维度(numpy称之为axes数)。


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

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

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

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

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


1
哇,只用了50秒就得到了答案!谢谢!! - Tengis

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

1
例子1并不像你所说的那样工作。实际上,例子2的输出应该是“1-D数组”。必须使用递归循环函数来查找数组的维度。您还需要检查每个元素以确定完整的维度,因为data [0]在长度上从data [1]可能会有所不同。 - ryry1985
2
例子1是完全错误的。它输出2只是因为外部数组的长度是2,并不是因为它是一个二维数组。 - Albert Hendriks

0

另一种方法:

查找数组形状:

如果它看起来像(2,),意味着数字在逗号后面没有其他内容,那么它是1D。 如果它看起来像(2,10),意味着有两个数字和一个逗号,那么它是2D。 同样,有多少个逗号可用,就是多少维数组。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接