import numpy as np
import datetime
dx1 = 10**(-8)
dx2 = dx1*0.3
X = np.sort(np.concatenate((np.arange(0,1,dx1),np.arange(dx2,1,dx2))))
X = X[np.concatenate(([True],np.diff(X) > 10**(-15)))]
Y = np.pi*np.sin(np.pi*X)/2
然后,
import pandas as pd
# Place everything in a dataframe. X is placed directly in the index.
data = pd.DataFrame(Y,columns = ['Y'], index = X)
# New columns with the intervals between dx and the average of pairs or consecutive points
data['dx'] = pd.Series(data.index-data.index[0]).diff().values
data['2pt_average'] = (data['Y'] + data['Y'].shift(1))/2
print('Integral:',(data['dx']*data['2pt_average']).sum())
> Integral: 0.9999999999999907
2条答案
按热度按时间yyhrrdl81#
这里有一个简单的程序,计算左黎曼和。这假设向量中给定的值按x值的递增顺序排序。
qvtsj1bj2#
我假设OP问题中的X值不是均匀分布的。如果是这样的话,我用Pandas做。首先模拟OP数据:
然后,
这利用了pandas中的优化循环。这可能是最快的方法之一。我可以将dx减少到10^(-8),这导致4亿个数据点。达到万亿规模将更加困难。
如果你跳过“dx”和“2pt_average”列的定义,你可以更有效率一点: