将列表转换为numpy数组

3

这段代码是用来读取两列数据的,然后将第一列打印到第一个numpy数组中,将第二列打印到第二个numpy数组中。

def read2coldata(filename):

    import numpy
    b = []
    f = open(filename,"r")
    lines = f.readlines()
    f.close()
    for line in lines:
        a = line.split()
        for i in a:
            b.append(i)
    return (numpy.array(b[::2]),numpy.array(b[1::2]))

然而,这会产生以下结果:
(array(['1.5', '8', '16', '17'], dtype='|S3'), array(['4', '5', '6', '6.2'], dtype='|S3'))

如何消除dtype="|S3"这部分,只保留:

(array(["1.5","8","16","17"], array(["4","5","6","6.2"])

如果您将数组转换为浮点数,则数据类型说明符将消失。考虑到您的字符串看起来需要转换为数字值,您可能需要研究一下这个问题。您可以使用 x.astype(float) - Akavall
1个回答

5
您不希望 dtype="S3" 消失。当您打印numpy数组时,它会显示其中的数据类型。这不是数据的一部分,而是关于程序如何存储和理解数据的信息。
在您的例子中,您读取了数字,因此可能希望在以后进行计算或其他操作时将数据视为数字(在您的情况下为浮点数)。
目前,它们被存储为字符串,这就是为什么您看到 dtype="S3" 的原因,它实际上意味着大小为3或更小的字符串类型。(如果我没记错的话)
我建议您尝试一个替代您当前函数的方案: numpy.genfromtxt 是一个将数据从txt文件加载到numpy数组中的函数。
文档非常好,如果您花费20分钟来了解参数,您会发现它非常有用。
array1 = numpy.genfromtxt('path_to_my_file.txt', usecols=0)
array2 = numpy.genfromtxt('path_to_my_file.txt', usecols=1)

这应该可以帮助您入门。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接