2016-04-03 25 views
0

这个想法是,我是一个学生,只是为了一些实验获取一些数据,我需要在表格中表示它。我使用了一个数组来存储用户输入的所有数据,但我正在寻找更有效的方式来表示我的数据。如何优化一个表格并实现循环

这里是我的代码:

import numpy as np 
print 'Times, Average Times, Velocity' 
tteb=np.zeros((3,7)) 
pos=np.array([1000,950,850,700,500,250,0]) 
posp=pos*(5.16667*10**(-4)) 
for j in range (0,3): 
    k=j+1 
    print 'This is for trial %d' %k 
    for i in range (0,7): 
     print 'Input for band %d'%i  
     tteb[j,i]=float(raw_input('~')) 
print 'Trials 1-3 for all 7 bands.:' 
print tteb 
raw_input('Press [Enter] to continue to average time and *velocity *(later).') 

ttebatvsum=tteb.sum(axis=0) 
print 'This is all the times added together. (Bands 0--->6).' 
print ttebatvsum 
print 'This is the average for all of the times. (Bands 0--->6).' 
ttebatvmean=ttebatvsum/3 
print ttebatvmean 
raw_input('Press [Enter] to continue to velocity.') 
velocity=posp/ttebatvsum 
print 'Here are all the velocities. (Bands 0--->6).' 
print velocity 

#Table Starts here 
print 'Pos (ml) |Pos (m) | t1  |t2   | t3  |t(avg)  |v   |' 
print '%2.3f  |%4.3f  |%6.3f  |%8.3f  |%10.3f  |%12.3f  |%14.3f  |'%(pos[0],posp[0],tteb[0,0],tteb[1,0],tteb[2,0],ttebatvmean[0],velocity[0]) 
print '%2.3f  |%4.3f  |%6.3f  |%8.3f  |%10.3f  |%12.3f  |%14.3f  |'%(pos[1],posp[1],tteb[0,1],tteb[1,1],tteb[2,1],ttebatvmean[1],velocity[1]) 
print '%2.3f  |%4.3f  |%6.3f  |%8.3f  |%10.3f  |%12.3f  |%14.3f  |'%(pos[2],posp[2],tteb[0,2],tteb[1,2],tteb[2,2],ttebatvmean[2],velocity[2]) 
print '%2.3f  |%4.3f  |%6.3f  |%8.3f  |%10.3f  |%12.3f  |%14.3f  |'%(pos[3],posp[3],tteb[0,3],tteb[1,3],tteb[2,3],ttebatvmean[3],velocity[3]) 
print '%2.3f  |%4.3f  |%6.3f  |%8.3f  |%10.3f  |%12.3f  |%14.3f  |'%(pos[4],posp[4],tteb[0,4],tteb[1,4],tteb[2,4],ttebatvmean[4],velocity[4]) 
print '%2.3f  |%4.3f  |%6.3f  |%8.3f  |%10.3f  |%12.3f  |%14.3f  |'%(pos[5],posp[5],tteb[0,5],tteb[1,5],tteb[2,5],ttebatvmean[5],velocity[5]) 
print '%2.3f  |%4.3f  |%6.3f  |%8.3f  |%10.3f  |%12.3f  |%14.3f  |'%(pos[6],posp[6],tteb[0,6],tteb[1,6],tteb[2,6],ttebatvmean[6],velocity[6]) 

的想法是用在我的情况下循环。我想使数组数在设定线中的1所

+0

BTW-使用Python 2.7.11,与Anaconda2 – Looi

+0

有是用于很好地显示numpy数据的模块,而不必编写单独的'print'语句。请参阅http://stackoverflow.com/questions/9712085/numpy-pretty-print-tabular-data – Stuart

+0

@Stuart,但是,对于这门课程,我不允许冒险到其他模块除了numpy,数学,pylab和a其他一些东西 – Looi

回答

0

看的增量上去:

print ...(pos[0],posp[0],tteb[0,0],tteb[1,0],tteb[2,0],ttebatvmean[0],velocity[0]) 
print ...(pos[1],posp[1],tteb[0,1],tteb[1,1],tteb[2,1],ttebatvmean[1],velocity[1]) 

如果我们有一个变量j,开始在零,我们可以这样写:

print ...(pos[j],posp[j],tteb[0,j],tteb[1,j],tteb[2,j],ttebatvmean[j],velocity[j]) 

因此,我们可以把它放在一个循环:

for j in range(0,7): 
    print ...(pos[j],posp[j],tteb[0,j],tteb[1,j],tteb[2,j],ttebatvmean[j],velocity[j]) 

但是,请注意you can print without a newline (carriage return),所以你不必在同一行上完成tteb。事实上,你可以这样做:

for i in range(0,num_trials): 
    sys.stdout.write('|%8.3f  '%(tteb[i,j])) 

把在:

for j in range(0,7): 
    sys.stdout.write('%2.3f  |%4.3f'%  (pos[j],posp[j]) 
    for i in range(0,num_trials): 
     sys.stdout.write('|%8.3f  '%(tteb[i,j])) 
    sys.stdout.write('|%12.3f  |%14.3f  |'%(ttebatvmean[j],velocity[j]) 
    sys.stdout.write('\n') #newline has to be printed manually for stdout 

希望你可以看到,我们可以打破写作分解成更易于管理的块,并在必要时行内使用循环。

NB:我不确定你打印的格式是什么,格式应该是'%8.3f',意思是8个数字的总字符,3个数字的固定精度格式。除非你想在小数点前面有更多或更少的数字,否则8不应该改变。

0

这样做的另一种方法是将数据形成numpy表格,然后输出整个事物。您还可以使用format更好地控制字符串的显示方式。

# Put all the output data into one 2d array 
table = np.concatenate((np.stack((pos, posp)), tteb, np.stack((ttebatvmean, velocity)))) 

# Rotate and flip the table so it's oriented the right way for output 
table = np.flipud(np.rot90(table)) 

# Set output format 
heading = "{:>8s}|" + "{:>8s}|" * 6 
row = "{:>8.0f}|" + "{:>8.3f}|" * 6 

# Print headings and data 
print(heading.format("Pos (ml)", "Pos (m)", "t1", "t2", "t3", "t(avg)", "v")) 
for data_row in table: 
    print(row.format(*data_row)) 

如果你不想把所有的数据到一个数组你也可以zip阵列一起输出:

tteb_rotated = np.flipud(np.rot90(tteb)) 
for p, pp, (t1, t2, t3), tavg, v in zip(pos, posp, tteb_rotated, ttebatvmean, velocity): 
    print(row.format(p, pp, t1, t2, t3, tavg, v))