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
所以我有一组来自工厂传感器的位置数据。它从已知的 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