我的数据文件只有一行,如:
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])
如果我读了一个包含多行的文件,它就能正常工作。
答案 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]