2017-01-18 19 views
0

Я столкнулся с этой проблемой и после многих часов попыток я хотел бы попросить кого-то с большим опытом работы на python, me (что не должно быть проблемой, потому что я начинающий питон).извлечение матрицы 3x3 файла .xyz с типом данных float64 или слияние трех матриц 1x3 с одной матрицей 3x3

Существует мой input.xyz файл с восемью точками, который выглядит примерно так:

15.486586, 46.798954, -6.232800, 15.445764, 46.807576, -6.249205, -0.040822,0.008622, -0.016405, 0.044832; 
6.233575, 48.083754, -4.223557, 6.187027, 48.090785, -4.243389, -0.046548, 0.007031, -0.019832, 0.051083; 
-2.159452, 40.818712, -3.104244, -2.200572, 40.818489, -3.120266, -0.041120,-0.000223, -0.016022, 0.044132; 
45.554111, 131.689322, 1.525740, 45.452954, 131.721406, 1.483290, -0.101157,0.032084, -0.042450, 0.114298; 
28.315109, 146.107918, 2.897549, 28.235633, 146.131800, 2.864060, -0.079476, 0.023882, -0.033489, 0.089489; 
7.303209, 138.223347, 4.702106, 7.250850, 138.242379, 4.679564, -0.052359, 0.019032, -0.022542, 0.060098; 
-32.211983, 148.909744, 12.919538, -32.279077, 148.907541, 12.876267,-0.067095, -0.002203, -0.043271, 0.079868; 
-48.926024, 180.295215, 20.142896, -49.008547, 180.275117, 20.127614,-0.082523, -0.020098, -0.015282, 0.086299; 

";" разделяет каждую точку, а первые три значения одной точки - значения x, y и z. Поэтому я хочу взять три точки со своими значениями xyz и записать их в матрицу с python. Это то, что я до сих пор:

# creating empty list for append 
xyz_matrx = [] 


counter = 0 
for line in xyz: 
    counter += 1 
# counter to get only first three columns 
    if counter%4 == 0: 
     break 

    # deleting whitespaces and selecting wanted data 
    linevalues = line.strip().split(",") 
    x = (linevalues[0:1]) 
    y = (linevalues[1:2]) 
    z = (linevalues[2:3]) 
    xyz_matrx.append(x) 

#flatten because xyz_matrix is a list within list 
# values converting into float64, because string won't work for following  
#work 
flattenedx = [val for sublist in xyz_matrx for val in sublist] 
matr_flatx = [float(i) for i in flattenedx] 
A_matrx = mat(matr_flatx) 

с этим, я получаю матрицу 1x3 с А точек, по горизонтали в матрице, но я хочу, три столбца в матрице, которые стоят для каждой точки и строки, которые соответствуют значениям xyz, матрица 3x3 в типе данных float64. Если я что-то меняю с помощью индексов, я получаю только матрицы string88. Я могу создать еще два списка для двух других точек, тогда у меня есть три матрицы 1x3, но «.append» не будет работать, потому что у меня нет двухмерной матрицы?

Я знаю, что мой код не очень эффективен, но я надеюсь, что кто-то понял мою проблему и может мне помочь.

Короткие: У меня есть файл .xyz ввода. Только первые три значения (x, y, z) каждой точки имеют значение, я хочу, чтобы три точки xyz с каждой из трех координат в Матрица 3x3 (первая вертикальная колонка: первая точка, xyz, вторая вертикальная колонка: вторая точка с xyz и третья точка третьего столбца с xyz по вертикали вниз), тип данных должен быть float64.

ответ

0

Вот один из способов вы можете сделать это

# creating empty list for append 
xyz_matrix = [] 
counter = 0 

with open('input.xyz', 'r') as f: 
    for line in f: 
     # Add the first three values to the matrix 
     xyz_matrix.append(map(float, line.strip().split(",")[0:3])) 
     counter += 1 
     if counter == 3: 
      break 

# Transpose 
xyz_matrix = zip(*xyz_matrix) 

print xyz_matrix 

Вы в конечном итоге со списком кортежей, но это должно быть в порядке.

Это более прямое, но менее общее

# Creating an empty 2D list 
xyz_matrix = [[], [], []] 
counter = 0 

with open('input.xyz', 'r') as f: 
    for line in f: 
     # Add the first three values to the matrix 
     values = map(float, line.strip().split(",")[0:3]) 

     # Append x, y, z to each rows 0, 1, 2 respectively 
     for i in range(3): 
      xyz_matrix[i].append(values[i]) 

     counter += 1 
     if counter == 3: 
      break 

print xyz_matrix 
+0

спасибо Петра, первый один уже сделал это для меня, я просто должен был добавить «matrix_fin = мат (xyz_matrix)» и моя матрица была как мне хотелось. – Anna

 Смежные вопросы

  • Нет связанных вопросов^_^