numpy字符串文件行到浮点数组科学记数法
Posted
技术标签:
【中文标题】numpy字符串文件行到浮点数组科学记数法【英文标题】:numpy string file row to float array scientific notation 【发布时间】:2019-04-25 14:30:53 【问题描述】:我有 csv 文件,每行枚举一个 4x4 矩阵,每个文件超过 300 行。 我想用 [0,0,0,1] 将每个 4x4 矩阵 numpy.multiply 我尝试使用 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')
【问题讨论】:
【参考方案1】:我尝试将字符串转换为列表,然后转换为数组,这似乎可以解决问题:
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. ]])
我想要的是从这个 4x4 矩阵中获取 XYZ 坐标
coor=[prod[0,3],prod[1,3],prod[2,3]]
现在我有
>>> coor
[-10.07625093852258, -45.90686875155648, 21.664174288937179]
所以,无论如何,为了记录,我发布了这个解决方案。也许有人可以告诉我一个更好的方法。 还是谢谢你。
【讨论】:
【参考方案2】:这是最终脚本:
# -*- 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')
【讨论】:
以上是关于numpy字符串文件行到浮点数组科学记数法的主要内容,如果未能解决你的问题,请参考以下文章