строка файла с пустыми строками для числовой нотации с плавающей точкой - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть CSV-файлы с пронумерованной матрицей 4x4 в каждой строке и более 300 строк в каждом файле. Я хотел бы умножить каждую матрицу 4x4 на [0,0,0,1] Я попытался преобразовать с помощью numpy.array, numpy.matrix и т. Д., А также попытался изменить исходную запись безрезультатно. формат строк, которые я хочу обработать:

camera1="[['9.5820988666217111e-001','1.8364288924172481e-002','2.8547603401192861e-001','-1.0076250938522580e+001'],['-1.7086800960614995e-001','-7.6361969781499617e-001','6.2264683441110236e-001','-4.5906868751556480e+001'],['2.2942958919045936e-001','-6.4540507435349748e-001','-7.2857007460000278e-001','2.1664174288937179e+001'],['0.0000000000000000e+000','0.0000000000000000e+000','0.0000000000000000e+000','1.0000000000000000e+000']]"

Я немного сбит с толку относительно разницы между матрицей и массивом в терминах numpy и которую я должен использовать. То, что я хотел бы достичь для каждой строки, это продукт

9.58209887e-01  1.83642889e-02  2.85476034e-01  -1.00762509e+01
-1.70868010e-01 -7.63619698e-01 6.22646834e-01  -4.59068688e+01
2.29429589e-01  -6.45405074e-01 -7.28570075e-01 2.16641743e+01
0.00000000e+00  0.00000000e+00  0.00000000e+00  1.00000000e+00

, умноженное на

0,0,0,1, 

для получения

[[0.0,0.0,0.0,-10.07625094],
[ -0.0,-0.0,0.0,-45.90686875],
[0.0,-0.0,-0.0,21.66417429],
[0.0,0.0,0.0,1.0]]

но я получаю только ошибки вроде Не реализовано и т. Любая подсказка?

Это будет мой скрипт на python:

import numpy as nm

def getCoord(fila):
#lee la línea y extrae las coordenadas XYZ
    vect=fila.split('=')
    print (vect)
    camID=vect[0]
    trMatrix=vect[1]
    b=[0,0,0,1]
    crs=nm.multiply(trMatrix,b)[0:3]
    return camid,crs

unFichero=r"docmatrix.txt"
with open('outfile.csv', 'w') as f:
    f.write(r"camera,coorx,coory,coorz")
    with open(unFichero) as infile:
        transf=getCoord(infile.read())
        f.write(transf[0]+","+transf[1]+'\n')

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

вот последний сценарий:

# -*- coding: utf-8 -*-
import numpy as np
import ast

def getCoord(fila):
#lee la línea y extrae las coordenadas XYZ
    vect=fila.split('=')
    camID=vect[0]
    print vect[1]
    trList=ast.literal_eval(vect[1])
    trArray=np.array(trList).astype(float)
    print trArray
    b=[0,0,0,1]
    prod=np.multiply(trArray,b)
    coor=[prod[0,3],prod[1,3],prod[2,3]]
    return camID,prod[0,3],prod[1,3],prod[2,3]

unFichero=r"c:\temp\docmatrix.txt"
with open('outfile.csv', 'w') as f:
    f.write("camera,coorx,coory,coorz\n")
    with open(unFichero) as infile:
        for row in infile.readlines():
            transf=getCoord(row)
            print transf
            f.write(','.join(str(e) for e in transf)+'\n')
0 голосов
/ 26 апреля 2019

Я попытался преобразовать строку в список, а затем в массив, который, кажется, делает свое дело:

import numpy as np
import ast
string="[['9.5820988666217111e-001','1.8364288924172481e-002','2.8547603401192861e-001','-1.0076250938522580e+001'],['-1.7086800960614995e-001','-7.6361969781499617e-001','6.2264683441110236e-001','-4.5906868751556480e+001'],['2.2942958919045936e-001','-6.4540507435349748e-001','-7.2857007460000278e-001','2.1664174288937179e+001'],['0.0000000000000000e+000','0.0000000000000000e+000','0.0000000000000000e+000','1.0000000000000000e+000']]"
c=ast.literal_eval(string) 

, а затем

cc=np.array(c).astype(float)

Таким образом, я сейчасесть массив чисел с плавающей точкой И теперь я могу определить

d=[0,0,0,1]
prod=np.multiply(cc,d)

, получив

>>> prod
array([[  0.        ,   0.        ,   0.        , -10.07625094],
       [ -0.        ,  -0.        ,   0.        , -45.90686875],
       [  0.        ,  -0.        ,  -0.        ,  21.66417429],
       [  0.        ,   0.        ,   0.        ,   1.        ]])

Я хотел получить координаты XYZ из этой матрицы 4x4

coor=[prod[0,3],prod[1,3],prod[2,3]]

Теперь у меня есть

>>> coor
[-10.07625093852258, -45.90686875155648, 21.664174288937179]

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

...