即使文件只有一维,如何制作 np.loadtxt return 多维数组?

How to make np.loadtxt return multidimensional arrays even the file has only one dimensional?

我需要获取一个ndarray的最后四列数据,大多数时候代码arr[:, -4:]是可以的,但是如果数组只有一维,这将抛出IndexError: too many indices.

我的数据是用arr = np.loadtxt('test.txt')获取的,所以如果test.txt有不止一行,比如

0 1 2 3 4
0 10 20 30 40

一切正常,但是如果test.txt只有一行,比如

0 1 2 3 4

这样会returnarray([ 0, 1, 2, 3, 4]),那么arr[:, -4:]就会抛出异常,因为应该是arr[-4:],所以如何让loadtxtreturn array([[ 0, 1, 2, 3, 4]])?

刚找到here

你可以要求它至少有 2 个维度:

arr = np.loadtxt('test.txt', ndmin=2)

使用 Ellipsis (...) 而不是空的 slice (:) 作为第一个索引:

>>> a = np.arange(30).reshape(3, 10)
>>> a[:, -4:]
array([[ 6,  7,  8,  9],
       [16, 17, 18, 19],
       [26, 27, 28, 29]])
>>> a[..., -4:]  # works the same for the 2D case
array([[ 6,  7,  8,  9],
       [16, 17, 18, 19],
       [26, 27, 28, 29]])

>>> a = np.arange(10)
>>> a[..., -4:]  # works also in the 1D case
array([6, 7, 8, 9])
>>> a[:, -4:]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: too many indices for array

EDIT 如果您希望 return 对于单行情况也是二维的,那么这应该可以解决问题:

>>> np.atleast_2d(a[..., -4:])
array([[6, 7, 8, 9]])