删除 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'。如果你使用 str
s 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:]]]
来实现
我有以下矩阵:
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'。如果你使用 str
s 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:]]]