我从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, )
的内容,所以这不起作用。
任何想法如何正确地做到这一点?
答案 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