如何在python 2.7中创建三个列表中的矩阵列表?

时间:2016-06-23 21:21:38

标签: python list matrix

我需要在python 2.7中读取一个txt文件,并从读数中创建四重列表。 txt文件中的元素是4行的块。因此,每第四行都是一个新元素。以下是文件的示例元素:

0 3 53
-0.999909 -0.0135226 851.576 
0.0135226 -0.999909 901.481 
0 0 1 
...

因此,从这个样本中,新列表的元素将是l = [('0','3',53,矩阵[[ - 0.999909 -0.0135226 851.576],[0.0135226 -0.999909 901.481],[0 0 1 ]])] l中的所有元组都是来自该形式的txt文件的读元素(字符串,字符串,整数,矩阵)。 我已经开发了代码来形成元组中前三项的列表,但是我无法为元组的第四个元素做矩阵列表。以下是我到目前为止的情况:

import numpy as np                                                   
import re                                                            
import operator                                                      

file=open('matching.txt','r')                                        
f=file.readlines()                                                   
v1, v2, w, r1, r2, r3 = [],[],[], [], [], []                         
for x, line in enumerate(f):                                         
    if x % 4 is 0:                                                   
         v1.append(line[:1])                                         
         v2.append(line[2:3])                                        
         str = re.search(' ([0-9]*)\r\n', line)                      
         if str:                                                     
             found = int(str.group(1))                               
         w.append(found)                                             
    elif x % 4 is 1:                                                 
        r1.append(line)                                              
    elif x % 4 is 2:                                                 
        r2.append(line)                                              
    else:                                                            
        r3.append(line)        

我需要从以上三个列表r1,r2,r3创建矩阵列表m,其元素将是矩阵的构建块.r1的元素是m在同一索引后的第一行矩阵,r2是在相同索引之后的m中的矩阵的secon行,r3是在相同索引之后的m中的第三行矩阵。列表m应该如下所示: M = [矩阵[[R1 [0]] [R2 [0]] [R3 [0]]],矩阵[[R1 [1] [R 2 [1] [R 3 [1]]] ...] 如何从上面的代码中的r1,r2,r3创建列表m?

谢谢你的帮助。

4 个答案:

答案 0 :(得分:1)

试试这个:

档案Console.ReadLine()

a.data

代码:

0 3 53
-0.999909 -0.0135226 851.576 
0.0135226 -0.999909 901.481 
0 0 1 
0 4 54
-0.999909 -0.0135226 851.576 
0.0135226 -0.999909 901.481 
1 1 2

答案 1 :(得分:1)

你的代码看起来很复杂。你为什么不喜欢这样的东西:

var body = [];
request.on('data', function(chunk) {
  body.push(chunk);
}).on('end', function() {
  body = Buffer.concat(body).toString();
  // at this point, `body` has the entire request body stored in it as a string
});

答案 2 :(得分:1)

建立@MaxU,如果列和行标记为

,我通常会使用pandas DataFrames
import pandas as pd
import numpy as np

DF = pd.read_table("a.data", sep=" ") 

DF
          0         1        2
0  0.000000  3.000000   53.000
1 -0.999909 -0.013523  851.576
2  0.013523 -0.999909  901.481
3  0.000000  0.000000    1.000
4  0.000000  4.000000   54.000
5 -0.999909 -0.013523  851.576
6  0.013523 -0.999909  901.481
7  1.000000  1.000000    2.000

然后您可以按

设置标签
DF.columns = #list of column labels
DF.index = #list of index labels

顺便说一句,索引数组的速度更快,所以如果你想用这种方式对它进行索引...存储一个变量DF.as_matrix(),然后像A[i,j]那样索引。如果您想要对DataFrame进行实际索引,那么请执行.iloc[i,j]

答案 3 :(得分:1)

我想这就是你要找的东西。

import numpy as np                                                   
import re                                                            
import operator                                                      

final_list = []
with open('data.txt','r') as f:
    line_1 = [float(num) for num in f.readline().split()]
    line_2 = [float(num) for num in f.readline().split()]
    line_3 = [float(num) for num in f.readline().split()]
    line_4 = [float(num) for num in f.readline().split()]

    #creating matrix from the 3 lines
    mat = np.matrix([line_2, line_3, line_4])

    line_1.append(mat)
    final_list.append(tuple(line_1))

print final_list