计算超过 100 000 行的文件的每一行的导数
calculation of the derivative for each line of a file with over 100 000 rows
我目前正在处理大文件,其值看起来例如像这样(总是 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...)执行此操作?
非常感谢您的帮助!
斯蒂芬
试试这一行:
awk '{if(NR>1)printf "%.1f\n",(-b)/(-a);a=;b=}' file
使用您的示例数据输出:
0.4
3.6
10.3
0.4
如果结果不是您想要的,请提供一个预期的输出示例。
使用 Scilab,您可以进行如下操作
x = read('test.txt',-1,2);
f=diff(x(:,2))./diff(x(:,1))
delta=(x(2:$,1)+x(1:$-1,1))/2
我目前正在处理大文件,其值看起来例如像这样(总是 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...)执行此操作?
非常感谢您的帮助!
斯蒂芬
试试这一行:
awk '{if(NR>1)printf "%.1f\n",(-b)/(-a);a=;b=}' file
使用您的示例数据输出:
0.4
3.6
10.3
0.4
如果结果不是您想要的,请提供一个预期的输出示例。
使用 Scilab,您可以进行如下操作
x = read('test.txt',-1,2);
f=diff(x(:,2))./diff(x(:,1))
delta=(x(2:$,1)+x(1:$-1,1))/2