消除端点并编写循环

时间:2015-07-17 20:37:21

标签: python

我有我正在分析的数据文件,它们排列成3列不同长度。我正在进行一些计算并绘制结果。以下是一个此类文件的示例:

-0.295  114.25439   150.5044481
-0.245  98.9089867  131.2786312
-0.195  86.11390819 116.4532951
-0.145  71.14000831 94.24134187
-0.095  58.13286891 76.8665462
-0.045  45.72259815 67.27844179
0.005   33.47819577 58.80690751
0.055   28.07752973 49.65840815
0.105   31.59224024 47.15886962
0.155   41.13397688 49.31988308
0.205   53.87164452 53.27500472
0.255   64.64565747 61.04637756
0.305   73.67569745 71.56437772

我正在对这些数据应用二阶多项式拟合(在我执行了一些计算之后)。第2列和第3列我乘以常数,将其平方,然后将其与第1列相比较。

我的问题是polyfit没有通过col 2和3中的最小值(或者说Python中的col 1和2),所以我想消除一些数据点以使拟合更好并得到它通过col 2和3中的最小值。

我怎样才能从消除端点开始?例如,只是第一行和最后一行。有没有办法在不必定义端点的情况下执行此操作?我希望这是通用的,这样我就可以加载任何文件而无需更改代码。

后续问题:是否可以编写一个循环来消除第一组端点,运行我的计算,然后是第二组端点,等等......?

以下是我的代码的相关部分:

L = np.loadtxt('filename.txt')


P = float(raw_input("Beam Energy (MeV) ="))
S12 = float(raw_input("Drift Length (m)="))


k = ((L[:, 0]) * 10.135 * 40.0) / (P * 1.8205)
SigmaX = 9.4 * pow(10, -6) * L[:, 1]
SigmaY = 9.4 * pow(10, -6) * L[:, 2]


SigmaX2 = SigmaX**2
SigmaY2 = SigmaY**2

2 个答案:

答案 0 :(得分:1)

如果你想尝试每个对称的端点集,你可以使用这样的循环(以及切片建议):

L = np.loadtxt('test.txt')
trimmedL = L

while len(trimmedL) > 0:
     trimmedL = trimmedL[1:-1,]
     do_calculations(trimmedL)

答案 1 :(得分:0)

您可以使用python中的切片运算符删除第一行和最后一行。

示例数据:

1 5 9
2 6 0
3 7 1
4 8 2

代码:

var data = [[1, 2, 3, 4],[5,6,7,8],[9, 0, 1, 2]]
new_data = data[:][1:-1] # get everything from 2nd row upto (not including) the last row
print new_data

输出:

[[2,3],[6,7],[0,1]]

至于天气与否,这是拒绝数据的最佳方式,使您的数据符合数据第2列和第3列的最小值。我不知道。