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

然后我可以减少data到属于某个id数字的行:

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

这里的问题是数据只包含一行。

所以我的问题是如何检查我的数组的二维data

我试着检查

data.shape[0]  # num of lines

但对于单线我得到类似的东西(n, ),所以这不起作用。

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

4

3 回答 3

16

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


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

确保data2D 的最简单方法是传递ndmin=2loadtxt

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

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

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

于 2012-11-24T19:16:29.280 回答
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
于 2017-08-06T03:02:51.730 回答
0

另一种方式:

寻找array.shape:

如果它像 (2,) 表示首先是数字,但在逗号之后什么都没有,它的 1D。否则,如果它像 (2,10) 表示两位带逗号的数字,它是 2D。同样,逗号有多少位可用,它是多维数组。

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

于 2020-07-01T06:03:37.760 回答