Python:numpy形状来协调

时间:2013-04-17 07:04:08

标签: python numpy coordinates tuples

我有一个python脚本,它调整三角形的坐标朝向三角形的重心。 这很好,但是为了生成可行的输出(我需要编写一个可以由其他软件导入的文本文件,Abaqus)我想在文本文件中写一个坐标列表。

但我无法让这项工作成功。 我想我首先需要从numpy数组创建一个列表或元组。 但是这不能正常工作。 这个列表中每个坐标仍然有一个数组。

我该如何解决这个问题? 我目前的脚本如下所示。

newcoords = [[0.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 0.0], [1.0, 1.0], [0.0, 1.0]]
newelems = [[0, 1, 2], [3, 4, 5]]

import numpy as np

#define triangles
triangles = np.array([[newcoords[e] for e in newelem] for newelem in newelems])

#find centroid of each triangle
CM = np.mean(triangles,axis=1)

#find vector from each point in triangle pointing towards centroid
point_to_CM_vectors = CM[:,np.newaxis] - triangles

#calculate similar triangles 1% smaller
new_triangle = triangles + 0.01*point_to_CM_vectors

newcoord = []
newcoord.append(list(zip(*new_triangle)))
print 'newcoord =', newcoord

#generate output
fout = open('_PartInput3.inp','w')
print >> fout, '*Node-new_triangle'
for i,x in  enumerate(newcoord):
  print >> fout, i+1, ',', x[0], ',', x[1]
fout.close()

输出文件'_PartInput3.inp'中的坐标列表应如下所示:

*Node-new_triangle
1, 0.00333333,  0.00333333
2, 0.99333333,  0.00333333
3, 0.00333333,  0.99333333
4, 0.00333333,  0.00666667
5, 0.99333333,  0.99666667
6, 0.00333333,  0.99666667

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

#generate output
fout = open('_PartInput3.inp','w')
fout.write('*Node-new_triangle\n')
s = new_triangle.shape
for i, x in enumerate(new_triangle.reshape(s[0]*s[1], 2)):
    fout.write("{}, {}, {}\n".format(i+1, x[0], x[1]))
fout.close()

或更好

#generate output
with open('_PartInput3.inp','w') as fout:
    fout.write('*Node-new_triangle\n')
    s = new_triangle.shape
    for i, x in enumerate(new_triangle.reshape(s[0]*s[1], 2)):
        fout.write("{}, {}, {}\n".format(i+1, x[0], x[1]))