我目前正在处理大型文件,其值如下所示像这样(总是2列,但超过100 000行):
1.3 1.5
2.5 2.0
3.6 6.0
4.0 10.1
7.8 11.5
对于这些文件,我想计算如下的衍生物:(2.0-1.5)/(2.5-1.3)&然后(6.0-2.0)/(3.6-2.5)等。 我写了一个Scilab文件,它从文件(test.txt)中读取矩阵x,然后执行for循环,计算导数。这是我的版本:
[x] = read('test.txt',-1,2);
i = 1;
j = 1;
s = size(x);
for i = 1:s(1,1)-1
f(i) = (x(i+1,2)-x(i,2))/(x(i+1,1)-x(i,1))
delta(i)=((x(i+1,1)+x(i,1)))/2
i=i+1
end
我的问题有两个:
1)超过100 000行的计算需要很长时间 - >是否有可能更快地做到这一点?或者只有当行数减少时才会这样(例如,只考虑每1000步?)
2)因为我想在linux脚本中执行此操作:是否有一种简单的方法可以在awk或其他Linux工具(如sed ...)中执行此操作?
非常感谢你的帮助!
斯蒂芬
答案 0 :(得分:4)
试试这行:
awk '{if(NR>1)printf "%.1f\n",($2-b)/($1-a);a=$1;b=$2}' file
输出您的示例数据:
0.4
3.6
10.3
0.4
如果结果不符合您的要求,请提供预期的输出示例。
答案 1 :(得分:0)
使用Scilab,您可以按照以下步骤进行操作
x = read('test.txt',-1,2);
f=diff(x(:,2))./diff(x(:,1))
delta=(x(2:$,1)+x(1:$-1,1))/2