我有一个只有一行的数据文件,例如:
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])
如果我读取一个包含多行的文件,它就可以工作。
发生的事情是,当您加载数组时,您会获得一维数组。当你打开它时,它会得到一组数字,即没有维度的数组。这是因为当你解压一个数组时,它的维数会减一。从一维数组开始,它归结为一个简单的数字。
如果测试 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,))
只需使用 numpy 的 inbuit loadtxt 参数 ndmin。
a,b,c=np.loadtxt('data.dat',ndmin=2,unpack=True)
输出
a=[1.2]
不使用 reshape 的简单方法是显式类型转换列表
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])
这比重塑更快!