2016-06-19 17 views
0

を有するPythonで行列の最初の列を削除I以下の行列を有する:二桁の数字

 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 

、私は1行リストの最初の列を削除するPythonコードの次の行を使用しています:

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

しかし、新しいmatrxixのヴァルス二桁を持つ最初の列の第二部を保持:

 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

問題はあなたの行列の形式です。実際の行列ではなく、文字列のリストがあるようです。 10,11,12,13,14の最後の数字はまだそこにあることがわかります。あなたがすべきことはこれline[1:]はあなたに「最初の文字のない行」を与え、最初はすべてのデータがstrのようですので、あなたがこの問題が発生した

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

ありがとうマーティン私はこの行列をファイルに保存することでこれをやっています。 – AishwaryaKulkarni

+0

それはあなたが望むフォーマットに依存します。この回答を見ることができます:http://stackoverflow.com/a/28659583/1163878 –

+0

私は最終的に、それをnp.loadtxt()とnp.matrxi()を使って行列に変換する関数に渡す必要があります。どのフォーマットが実現可能か? – AishwaryaKulkarni

1

を行うことができ

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

ザ・実行することです。あなたはstrの分割方法を使用する場合、それはあなたの空白で区切られた部品のリストを与えるだろう、そう

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