即使文件只有一维,如何制作 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:]
,所以如何让loadtxt
return 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]])
我需要获取一个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:]
,所以如何让loadtxt
return 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]])