numpy loadtxt单行/行作为列表

时间:2012-11-23 11:22:02

标签: python arrays numpy

我的数据文件只有一行,如:

 1.2  2.1  3.2

我使用numpy版本1.3.0 loadtxt加载它

 a,b,c = loadtxt("data.dat", usecols(0,1,2), unpack=True)

输出是浮点而不是像

这样的数组
 a = 1.2

我希望它会是:

 a = array([1.2])

如果我读了一个包含多行的文件,它就能正常工作。

3 个答案:

答案 0 :(得分:2)

当你加载数组时,你会得到一个单维数组。打开包装时,它会获得一组数字,即没有尺寸的数组。这是因为当您解压缩数组时,它会将维数减少一个。从单维数组开始,它可归结为一个简单的数字。

如果你测试a的类型,它不是一个浮点数,而是一个numpy.float,它具有数组的所有属性,但是作为形状的void元组。所以它是一个数组,只是没有表示为一个。

如果您需要的是只有一个元素的单维数组,最简单的方法是在解压缩之前重新整形数组:

#note the reshape function to transform the shape
a,b,c = loadtxt("text.txt").reshape((-1,1))

这为您提供了预期的结果。发生的事情是将它重新塑造成一个二维数组,这样当你解压缩它时,维数就会减少到一个。

编辑:

如果你需要它在多维数组中正常工作并在读取一维数组时保持一维,我认为最好的方法是使用loadtxt正常读取并在第二阶段重塑数组,将它们转换为单维如果他们是纯数字

a,b,c = loadtxt("text.txt",unpack=True)
for e in [a,b,c]
    e.reshape(e.shape if e.shape else (-1,))

答案 1 :(得分:0)

不使用重塑的简单方法是明确地对列表进行类型转换

 a,b,c = loadtxt("data.dat", usecols(0,1,2), unpack=True)
 a,b,c = (a,b,c) if usi.shape else ([a], [b], [c])

这比重塑更快!

答案 2 :(得分:0)

只需使用numpy的inbuit loadtxt参数ndmin。

a,b,c=np.loadtxt('data.dat',ndmin=2,unpack=True)

输出

a=[1.2]