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

1 回答 1

5

dtype="S3"你不想“走开” 。当您打印一个 numpy 数组时,它会为您提供其中数据的类型。它不是数据的一部分,它是关于程序如何存储和理解数据的信息。

在您的特定示例中,您读取了数字,因此您可能希望以后在计算或其他任何事情中使用它们,在这种情况下,您希望将数据理解为数字(在您的情况下为浮点数)。

目前它们被存储为字符串,这就是为什么你看到dtype="S3"它本质上意味着大小为 3 或更小的字符串类型。(IIRC)

我向您建议您的函数的替代方法: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)

这应该让你开始。

于 2012-12-08T02:25:41.617 回答