【问题标题】:Recomended way to create a matrix containing strings in python在 python 中创建包含字符串的矩阵的推荐方法
【发布时间】:2013-08-14 11:17:37
【问题描述】:

我需要编写一个程序来收集不同的数据集并将它们联合起来。为此,我必须读取一个逗号分隔的矩阵:在这种情况下,每一行代表一个实例(在这种情况下是蛋白质),每一列代表实例的一个属性。如果实例有属性,则用 1 表示,否则用 0 表示。矩阵类似于下面给出的示例,但更大,有 35000 个实例和数百个属性。

Proteins,Attribute 1,Attribute 2,Attribute 3,Attribute 4
Protein 1,1,1,1,0
Protein 2,0,1,0,1
Protein 3,1,0,0,0
Protein 4,1,1,1,0
Protein 5,0,0,0,0
Protein 6,1,1,1,1

在将有关实例的其他信息写入新文件之前,我需要一种方法来存储矩阵。我想使用 numpy 数组,因为我希望能够选择和检查单列。我尝试使用 numpy.empty 创建给定大小的数组,但似乎您必须预先选择字符串的长度并且之后无法更改它们。

有没有更好的方法来处理这些数据?我也想到了列表字典,但我无法选择单列。

【问题讨论】:

    标签: python arrays string numpy


    【解决方案1】:

    您可以使用numpy.loadtxt,例如:

    import numpy as np
    a = np.loadtxt(filename, delimiter=',',usecols=(1,2,3,4),
                   skiprows=1, dtype=float)
    

    这将导致类似:

    #array([[ 1.,  1.,  1.,  0.],
    #       [ 0.,  1.,  0.,  1.],
    #       [ 1.,  0.,  0.,  0.],
    #       [ 1.,  1.,  1.,  0.],
    #       [ 0.,  0.,  0.,  0.],
    #       [ 1.,  1.,  1.,  1.]])
    

    或者,使用structured arrays (`np.recarray'):

    a = np.loadtxt('stack.txt', delimiter=',',usecols=(1,2,3,4),
            skiprows=1, dtype=[('Attribute 1', float),
                               ('Attribute 2', float),
                               ('Attribute 3', float),
                               ('Attribute 4', float)])
    

    您可以从哪里获取每个字段,例如:

    a['Attribute 1']
    #array([ 1.,  0.,  1.,  1.,  0.,  1.])
    

    【讨论】:

    • 阅读loadtxt 我发现还有numpy.genfromtxt 用于矩阵中缺失数据的情况。 (现在对我来说不是这样,但也许有人会发现这些信息有用?)
    • 是的,你是对的!我也为您的情况尝试过genfromtxt,它们在这种情况下的使用方式相同,参数相同......
    【解决方案2】:

    看看pandas

    pandas 是一个开源、BSD 许可的库,为 Python 编程语言提供高性能、易于使用的数据结构和数据分析工具。

    【讨论】:

    • 这次我会尝试 np.loadtxt,但从长远来看,pandas 对我来说似乎是件好事。我会看看这个。
    【解决方案3】:

    您可以改用genfromtxt

    data = np.genfromtxt('file.txt', dtype=None)
    

    这将为您的表创建一个structured array (aka record array)

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多