python 毕达哥拉斯函数

python Pythagoras function

所以我有一组来自工厂传感器的位置数据。它从已知的 lat/long 位置生成以米为单位的 x、y 和 z 信息。我有一个函数可以从 lat/long 转换以米为单位的距离,但我需要使用 Pythagoras 函数中的 x 和 y 数据来确定它。让我试着用传感器提供的 JSON 数据的例子来阐明。

[
{
    "id": "84eb18677194",
    "name": "forklift_0001",
    "areaId": "Tracking001",
    "areaName": "Hall1",
    "color": "#FF0000",
    "coordinateSystemId": "CoordSys001",
    "coordinateSystemName": null,
    "covarianceMatrix": [
        0.82,
        -0.07,
        -0.07,
        0.55
    ],
    "position": [ #this is the x,y and z data, in meters from the ref point
        18.11,
        33.48,
        2.15
    ],

在此分支中,叉车距离参考值 lat/long 沿 18.11m,向上 33.38m。传感器高 2.15 米,这是我不需要的固定信息。为了计算出与参考点的距离,我需要使用毕达哥拉斯,然后将该数据转换回 lat/long,以便我的分析工具可以呈现它。

我的问题(就 python 而言)是我不知道如何让它将 18.11 和 33.38 视为 x 和 y 并告诉它完全忽略 2.15。这是我目前所拥有的。

import math
import json
import pprint
import os
from glob import iglob

rootdir_glob = 'C:/Users/username/Desktop/test_folder**/*"' # Note the 
added asterisks, use forward slash
# This will return absolute paths
file_list = [f for f in 
iglob('C:/Users/username/Desktop/test_folder/13/00**/*', recursive=True) 
if os.path.isfile(f)]

for f in file_list:
    print('Input file: ' + f) # Replace with desired operations

with open(f, 'r') as f:

    distros = json.load(f)
    output_file = 'position_data_blob_14' + str(output_nr) + '.csv' #output file name may be changed


def pythagoras(a,b):
    value = math.sqrt(a*a + b*b)
    return value

result = pythagoras(str(distro['position'])) #I am totally stuck here :/
print(result)

这段脚本是一个更广泛的项目的一部分,该项目按机器和人员以及一天中的工作和非工作时间解析文件。

如果有人能给我一些关于如何使毕达哥拉斯部分起作用的提示,我将不胜感激。我不确定我是否应该将它定义为一个函数,但是当我输入这个时,我想知道它是否应该是一个 'for' 循环,它使用 x & y 并忽略 x.

非常感谢所有帮助。

试试这个:

position = distro['position']  # Get the full list
result = pythagoras(position[0], position[1])  # Get the first and second element from the list
print(result)

为什么使用 str() 作为函数的参数?你想做什么?

您正在将一个输入,一个数字列表,传递给一个接受两个数字作为输入的函数。对此有两种解决方案 - 要么更改传入的内容,要么更改函数。

distro['position'] = [18.11, 33.48, 2.15],所以对于第一个解决方案,您需要做的就是传入 distro['position'][0]distro['position'][1]:

result = pythagoras(distro['position'][0], distro['position'][1])

或者(我认为这更优雅),将列表传递给函数并让函数提取它关心的值:

result = pythagoras(distro['position'])

def pythagoras(input_triple):
    a,b,c = input_triple
    value = math.sqrt(a*a + b*b)
    return value

您检查过您传递的参数的数据类型了吗?

def pythagoras(a,b): 
    value = math.sqrt(int(a)**2 + int(b)**2)
    return value

这是整数的情况。

我使用的解决方案是

对于 file_list 中的 f: print('Input file: ' + f) # 替换成需要的操作

with open(f, 'r') as f:

    distros = json.load(f)
    output_file = '13_01' + str(output_nr) + '.csv' #output file name may be changed

    with open(output_file, 'w') as text_file:
        for distro in distros:      
            position = distro['position']
            result = math.sqrt(position[0]*position[0] + position[1]*position[1]), 
            print((result), file=text_file)

print('Output written to file: ' + output_file)
output_nr = output_nr + 1