我有我正在分析的数据文件,它们排列成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
答案 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列的最小值。我不知道。