8

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

 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])

如果我读取一个包含多行的文件,它就可以工作。

4

3 回答 3

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,))
于 2012-11-23T11:30:52.203 回答
2

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

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

输出

a=[1.2]
于 2019-03-24T13:51:19.750 回答
0

不使用 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])

这比重塑更快!

于 2012-11-24T06:15:29.717 回答