我希望标题不要太混乱,但这是我能想到的最好的(随意建议更好的标题!)
我有一个物理传感器放置在房间的固定位置,例如坐标系中的(1、1、1、1)。该传感器能够估计其在坐标系中的位置。我让传感器在30秒的时间内每秒10次估算位置,因此总共有300个位置估算值保存到了文件中。]
现在,为了评估位置估计值,我计算了从每个估计值到参考点(1、1、1)的距离,并将所有距离保存到列表中。我想找出到参考点的距离的标准偏差(1、1、1)。
我对标准差的计算并不熟悉,但正如我所建议的多种解释和指导一样,1)计算所有距离的平均值2)从每个距离中减去均值并将其平方3)将步骤2)中的所有值添加到列表中并计算其平均值4)取均值的平方根
但是,我认为我不应该在步骤2中使用计算出的距离的平均值,而应该使用0值,因为我不想计算出计算出的距离与平均值的标准偏差,但对我的参考而言点(1、1、1)。因为我的参考点到自己的距离显然为0,所以我认为这可能是正确的方法。
这是我的python脚本:
import sys from math import sqrt, pow # Returns the amount of samples collected - necessary for mean and standard deviation calculations def get_sample_count(filename): with open(filename) as f: for i, l in enumerate(f): pass return i + 1 def distanceBetweenTwoPoints2D(sample_point, reference_point): return sqrt(pow(sample_point[0] - reference_point[0], 2) + pow(sample_point[1] - reference_point[1], 2)) def distanceBetweenTwoPoints3D(sample_point, reference_point): return sqrt(pow(sample_point[0] - reference_point[0], 2) + pow(sample_point[1] - reference_point[1], 2) + pow(sample_point[2] - reference_point[2], 2)) def standard_deviation(distances_2D, sample_distance_mean_2D, distances_3D, sample_distance_mean_3D, sample_count): squared_distances_2D = [] squared_distances_3D = [] for distance in distances_2D: squared = pow(distance - 0, 2) squared_distances_2D.append(squared) for distance in distances_3D: squared = pow(distance - 0, 2) squared_distances_3D.append(squared) std2D = sqrt(sum(squared_distances_2D) / sample_count) std3D = sqrt(sum(squared_distances_3D) / sample_count) return std2D, std3D def evaluateData(filename, reference_point): sample_x_mean = 0.0 sample_y_mean = 0.0 sample_z_mean = 0.0 distances_2D = [] distances_3D = [] sample_count = get_sample_count(filename) with open(filename) as file: for line in file: x = float(line.split(',')[0]) y = float(line.split(',')[1]) z = float(line.split(',')[2]) # Add individual coordinates to means sample_x_mean += x sample_y_mean += y sample_z_mean += z # Calculate distance in 2D and 3D and add to distances lists sample_point = [x, y, z] sample_distance_2D = distanceBetweenTwoPoints2D(sample_point, reference_point) sample_distance_3D = distanceBetweenTwoPoints3D(sample_point, reference_point) distances_2D.append(sample_distance_2D) distances_3D.append(sample_distance_3D) sample_x_mean /= sample_count sample_y_mean /= sample_count sample_z_mean /= sample_count sample_distance_mean_2D = sum(distances_2D) / sample_count sample_distance_mean_3D = sum(distances_3D) / sample_count std2D, std3D = standard_deviation(distances_2D, sample_distance_mean_2D, distances_3D, sample_distance_mean_3D, sample_count) return sample_count, sample_x_mean, sample_y_mean, sample_z_mean, sample_distance_mean_2D, sample_distance_mean_3D, std2D, std3D if __name__ == "__main__": filename = sys.argv[1] direction = filename.split('(')[0] x_reference = float((filename.split('(')[1].split(')')[0].split('_')[0]).replace(',', '.')) y_reference = float((filename.split('(')[1].split(')')[0].split('_')[1]).replace(',', '.')) z_reference = float((filename.split('(')[1].split(')')[0].split('_')[2]).replace(',', '.')) reference_point = [x_reference, y_reference, z_reference] print("\n") sample_count, x_mean, y_mean, z_mean, distance_mean_2D, distance_mean_3D, std2D, std3D = evaluateData(filename, reference_point) print("DIRECTION: {}, SAMPLE COUNT: {}".format(direction, sample_count)) print("X REFERENCE: {}, Y REFERENCE: {}, Z REFERENCE: {}".format(x_reference, y_reference, z_reference)) print("X MEAN: {}, Y MEAN: {}, Z MEAN: {}".format(x_mean, y_mean, z_mean)) print("DISTANCE MEAN 2D: {}, DISTANCE MEAN 3D: {}".format(distance_mean_2D, distance_mean_3D)) print("STD2D: {}, STD3D: {}".format(std2D, std3D)) print("\n")
有人能证明我是对还是错?
问候
我希望标题不要太混乱,但是这是我能想到的最好的(随意建议更好的标题!)我在房间的固定位置放置了一个物理传感器,例如(1、1、1)在...
两件事:1)如果您已经在distanceBetweenTwoPoints [23] D()中计算了参考点和观察点之间的距离,则不希望将参考点用作平均值。计算中已经包含了这一点。