我正在尝试打印天文模拟的输出,以便在我的控制台中看起来很漂亮。我生成4个numpy数组,称为Amplitude,Mass,Period和Eccentricity,我想将它们放在一个表中。每个数组的第一个索引是行星1的值,第二个是行星2的值等。
所以我的数组看起来像(值都是浮点数,例如'a1'只是一个占位符):
amp = [a1 a2 a3 a4]
mass = [m1 m2 m3 m4]
period = [p1 p2 p3 p4]
ecc = [e1 e2 e3 e4]
我希望我的桌子看起来像:
planet|amp|mass|period|ecc
1 |a1 |m1 |p1 |e1
2 |a2 |m2 |p2 |e2
...
我尝试过使用制表符,例如:
print tabulate(['1', amp[0], mass[0], period[0], ecc[0]], headers=[...])
但是我得到'numpy.float64'对象的错误是不可迭代的
任何帮助将不胜感激!
答案 0 :(得分:2)
像这样使用zip()
:
amp = ['a1', 'a2', 'a3', 'a4']
mass = ['m1', 'm2', 'm3', 'm4']
period = ['p1', 'p2', 'p3', 'p4']
ecc = ['e1', 'e2', 'e3', 'e4']
planet = [1, 2, 3, 4]
titles = ['planet', 'amp', 'mass', 'period', 'ecc']
print '{:<6}|{:<6}|{:<6}|{:<6}|{:<6}'.format(*titles)
for item in zip(planet, amp, mass, period, ecc):
print '{:<6}|{:<6}|{:<6}|{:<6}|{:<6}'.format(*item)
您可以使用enumerate()
,而不是planet = [1, 2, 3, 4]
,而不是print '{:<6}|{:<6}|{:<6}|{:<6}|{:<6}'.format(*titles)
for i, item in enumerate(zip(amp, mass, period, ecc)):
print '{:<6}|{:<6}|{:<6}|{:<6}|{:<6}'.format(i+1, *item)
。
>>> python print_table.py
planet|amp |mass |period|ecc
1 |a1 |m1 |p1 |e1
2 |a2 |m2 |p2 |e2
3 |a3 |m3 |p3 |e3
4 |a4 |m4 |p4 |e4
<强>输出:强>
numpy.savetxt
答案 1 :(得分:0)
tabulate.tabulate()以列表(或数组)为主要参数,你给它一个浮点数列表(和一个'1')。
因此,您希望立即输入所有数据。
您需要创建新列表,其中每个列表都是新表的一个水平行。您还需要在前面添加行号。
首先构建新的列表/数组,其中:
list1=[1,a1,m1,p1,e1]
list2=[2,a2,m2,p2,e2]
...
然后尝试:
print tabulate([list1, list2, list3, list4], headers=[...])
答案 2 :(得分:0)
您可以将zip()与tabulate的用法结合起来,创建一个更好看的表格:
from tabulate import tabulate
headers = ['planet', 'amp', 'mass', 'period', 'ecc']
amp = [1.1, 1.2, 1.3, 1.4]
mass = [2.1, 2.2, 2.3, 2.4]
period = [3.1, 3.2, 3.3, 3.4]
ecc = [4.1, 4.2, 4.3, 4.4]
planet = range(1, len(amp)+1)
table = zip(planet, amp, mass, period, ecc)
print(tabulate(table, headers=headers, floatfmt=".4f"))
planet amp mass period ecc
-------- ------ ------ -------- ------
1 1.1000 2.1000 3.1000 4.1000
2 1.2000 2.2000 3.2000 4.2000
3 1.3000 2.3000 3.3000 4.3000
4 1.4000 2.4000 3.4000 4.4000
答案 3 :(得分:-2)
您可以使用\t
。
例如:
print 'a\t','b\t','\n','c\t','d\t'
输出:
a b
c d