我创建了一个名为'column.txt'的文本文件,其中包含以下数据:
1
2
3
4
9
8
然后我编写了下面的代码,将我的数据转换为单行文本文件。
import numpy as np
x=np.loadtxt('column.txt')
z=x.T
y=x.transpose()
np.savetxt('row.txt',y, fmt='%i')
我尝试了两种不同的方法 - 使用矩阵乘法(我的代码中的注释行)和使用转置命令。问题是输出与输入完全相同!
之后,我在输入文件中添加了另一列,运行代码,这次输出完全没问题(输出包含两行!)
所以我的问题是:
有没有将单个列文件转换为单行文件?如果是的话,你能描述一下吗?
答案 0 :(得分:2)
如果输入数据只包含一列,np.loadtxt()
将返回一维数组。转置基本上意味着颠倒轴的顺序。对于只有一个轴的一维数组,这是一个无操作。您可以通过多种不同的方式将数组转换为二维数组,并且转置将按预期用于二维数组,例如
x = np.atleast_2d(np.loadtxt('column.txt'))
答案 1 :(得分:2)
您可以使用numpy.reshape转置数据并更改数组的形状,如下所示:
>>> import numpy as np
>>> arr=np.loadtxt('column.txt')
>>> arr
array([ 1., 2., 3., 4., 9., 8.])
>>> arr.shape
(6,)
>>> arr=arr.reshape(6,1)
>>> arr
array([[ 1.],
[ 2.],
[ 3.],
[ 4.],
[ 9.],
[ 8.]])
或者您可以将数组维度的编号作为numpy.loadtxt函数
的输入>>> np.loadtxt('column.txt', ndmin=2)
array([[ 1.],
[ 2.],
[ 3.],
[ 4.],
[ 9.],
[ 8.]])
但是,如果您想将单个列转换为单个行并将其写入文件,则需要执行以下操作
>>> parr=arr.reshape(1,len(arr))
np.savetxt('column.txt',parr, fmt='%i')
答案 2 :(得分:1)
这是因为1D阵列的转置与其自身相同,因为没有其他维度可以转置。
您可以尝试添加第二维,
>>> import numpy as np
>>> x = np.array([[1], [2], [3], [4], [9], [8]])
>>> x.T
array([[1, 2, 3, 4, 9, 8]])