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

Removing first column in a matrix in python having double digit numbers

我有以下矩阵:

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

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

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

你可以做的

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

发生这种情况是因为您的所有数据似乎都是 str,因此 line[1:] 给您 'line without the first character'。如果你使用 strs split 方法,它会给你一个由空格分隔的部分列表,所以

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

可能会为您解决问题。

P.S。在进行任何数学运算之前,您可能还希望使用 float() 将字符串转换为数字。您可以使用 vals = [map(float, line[1:]) for line in [row.split() for row in matrix[1:]]]

来实现