我有一组具有X个点的数据,我想将其调整为x + n个点。
我需要用tcl来做这件事,并且在最后一部分中苦苦挣扎。
我知道将数据重新调整到所需点数所需的最大值,最小值和增量值。
原始数据:
-0.3925
-0.262
-0.1965
-0.026
-0.013
-0.0065
-0.0026
0
0.0026
0.0065
0.013
0.026
0.1965
0.262
0.3925
我正在努力构建一个for循环,它将获取第一个值并从delta中减去它以创建第二个值。随后取第二个并从delta中减去它以创建第三个,依此类推。依此类推。
鉴于:
Points 19
Min : -0.3925
Max :0.3925
Delta : 0.04361
结果列数据如下所示:
-0.3925
-0.348888889
-0.305277778
-0.261666667
-0.218055556
-0.174444444
-0.130833333
-0.087222222
-0.043611111
-6.93889E-17
0.043611111
0.087222222
0.130833333
0.174444444
0.218055556
0.261666667
0.305277778
0.348888889
0.3925
有人可以给我一些建议。
答案 0 :(得分:1)
执行此类操作时有几个关键点(这些也适用于Tcl以外的语言)。首先,您应该计算所需范围内的增量以及所需的步数。其次,如果可以,你应该使用整数来保持递增和循环控制,以避免因舍入而导致的fencepost错误;而是通过将delta乘以循环计数器并添加到原始值来计算循环迭代的值。第三,在打印结果时,您应该考虑正确的精度;在Tcl中,这往往意味着将format
与%f
转换和适当的宽度说明符一起使用。
set from -0.3925
set to 0.3925
set points 19
set delta [expr {($to-$from) / double($points-1)}]
for {set i 0} {$i<$points} {incr i} {
set x [expr {$from + $i*$delta}]
puts [format "%.5f" $x]
}
这会产生此输出:
-0.39250 -0.34889 -0.30528 -0.26167 -0.21806 -0.17444 -0.13083 -0.08722 -0.04361 0.00000 0.04361 0.08722 0.13083 0.17444 0.21806 0.26167 0.30528 0.34889 0.39250