Python 使用Numpy从文本文件中读取点的三乘三坐标?

Python 使用Numpy从文本文件中读取点的三乘三坐标?,python,numpy,Python,Numpy,我想使用文本文件中的数据计算角度。 现在,我有一个python代码,可以计算角度 import numpy as np a = np.array([27.090, 26.790, 4.920]) b = np.array([26.790, 26.400, 5.740]) c = np.array([27.490, 26.590, 6.370]) ba = a - b bc = c - b cosine_angle = np.dot(ba, bc) / (np.linalg.norm(ba)

我想使用文本文件中的数据计算角度。 现在,我有一个python代码,可以计算角度

import numpy as np

a = np.array([27.090, 26.790, 4.920])
b = np.array([26.790, 26.400, 5.740])
c = np.array([27.490, 26.590, 6.370])

ba = a - b
bc = c - b

cosine_angle = np.dot(ba, bc) / (np.linalg.norm(ba) * np.linalg.norm(bc))
angle = np.arccos(cosine_angle)

print np.degrees(angle)
但是我希望这个python代码应该从文本文件(
coord.txt
)中获取坐标。因为我在文本文件中有多个坐标,比如

27.090 26.790 4.920
26.790 26.400 5.740
27.490 26.590 6.370 
对于每一行,文本文件的格式为
x1 y1 z1 x2 y2 z2 x3 y3 z3
,它应该给出每一行对应的角度

代码应考虑文本文件中的坐标和另一个文本文件中的写入角。

import numpy as np
with open(filename) as infile:
    data = [map(float, i.split()) for i in infile.readlines()]
    data = [map(np.array, [j[i:i+3] for i in range(0, len(j), 3)]) for j in data]    

for i in data:
    print i
输出:

[array([ 27.09,  26.79,   4.92]), array([ 26.79,  26.4 ,   5.74]), array([ 27.49,  26.59,   6.37])]
[array([ 1.239,  2.36 ,  4.56 ]), array([ 2.34,  4.56,  6.9 ]), array([ 2.35,  6.98,  9.07])]
按注释编辑


如果您的文本文件是这样的(每行有三个数据,并由空格分隔):

然后你可以试试这个:

import csv
import numpy as np

coord = []
with open("coord.txt", 'r') as f:
    reader = csv.reader(f)
    for line in reader:
        coord.append(line[0].split(' '))

for i, line in enumerate(coord):
    for j, value in enumerate(line):
        coord[i][j] = float(value)

print(coord)

在文本文件中,坐标组内的每个坐标是否在单独的行上?是否有一个空行分隔每个坐标组?但代码不起作用。我在你的python代码中给出了文件名coord.txt,但它不起作用。python代码应该给出与该坐标对应的角度。是的,我得到了错误“回溯(最近一次调用last):文件“final.py”,第2行,带open(coord.txt)as infle:NameError:name“coord”未定义为“
,而open(“coord.txt”)为infle
@claudiasmith这两个答案都使用您提供的数据。因此,我将两者都投了赞成票。您需要自己在代码中实现答案。这应该很容易。没有人知道你的数据到底是什么样子的。只有你能做到。
27.090 26.790 4.920
26.790 26.400 5.740
27.490 26.590 6.370
import csv
import numpy as np

coord = []
with open("coord.txt", 'r') as f:
    reader = csv.reader(f)
    for line in reader:
        coord.append(line[0].split(' '))

for i, line in enumerate(coord):
    for j, value in enumerate(line):
        coord[i][j] = float(value)

print(coord)