代码之家  ›  专栏  ›  技术社区  ›  AishwaryaKulkarni

删除python中具有两位数的矩阵中的第一列

  •  1
  • AishwaryaKulkarni  · 技术社区  · 9 年前

    我有以下矩阵:

         Pos     A       C       G       U
         1       0       0       1       0
         2       0.75    0       0.25    0
         3       0       0       0       1
         4       0       1       0       0
         5       1       0       0       0
         6       1       0       0       0
         7       0       1       0       0
         8       0       1       0       0
         9       0.5     0.25    0       0.25
         10      0       0       1       0
         11      0       0       1       0
         12      0       1       0       0
         13      0       0       1       0
         14      1       0       0       0
    

    我使用python代码中的以下行删除列表的第一行和第一列:

         vals = [line[1:] for line in matrix[1:]]
    

    但新的matrxix vals保留了第一列中具有两位数的第二部分:

         0       0       1       0
         0.75    0       0.25    0
         0       0       0       1
         0       1       0       0
         1       0       0       0
         1       0       0       0
         0       1       0       0
         0       1       0       0
        0.5     0.25    0       0.25
         0       0       0       1       0
         1       0       0       1       0
         2       0       1       0       0
         3       0       0       1       0
         4       1       0       0       0
    

    为了避免这种情况,我需要做哪些修改? P.S我刚刚修改了这个问题,矩阵以列表的形式存储在代码中,如下所示:

       matrix_file = open(pwmfile, "rU")
       matrix = matrix_file.readlines()
       vals = [line[1:] for line in matrix[1:]]
    
    2 回复  |  直到 9 年前
        1
  •  2
  •   Martin Hallén    9 年前

    问题是矩阵的格式。看起来你有一个字符串列表,而不是一个实际的矩阵。我们可以看到10,11,12,13,14中的最后一个数字仍然存在。您应该做的是首先运行

    actualMatrix = [line.split() for line in matrix]
    

    你能做的

    vals = [line[1:] for line in actualMatrix[1:]]
    
        2
  •  1
  •   Pavel Gurkov    9 年前

    发生这种情况是因为似乎您的所有数据 str s、 因此 line[1:] 提供“不带第一个字符的行”。如果您使用 字符串 的split方法,它将为您提供一个由空格分隔的部分列表,因此

     vals = [line[1:] for line in [row.split() for row in matrix[1:]]]
    

    很可能会帮你。

    附言:您可能还想将字符串转换为数字 float() 在做任何数学之前。你可以用 vals = [map(float, line[1:]) for line in [row.split() for row in matrix[1:]]]