This commit is contained in:
ljy 2025-05-06 20:27:42 +08:00
parent d87452b934
commit 3bcfafd02a
3 changed files with 139 additions and 0 deletions

29
app/algorithms.py Normal file
View File

@ -0,0 +1,29 @@
import numpy as np
from typing import List, Tuple
def bilinear_interpolation(
X_NUM: int,
Y_NUM: int,
X: float,
Y: float,
X0: List[float],
Y0: List[float],
Z0: np.ndarray
) -> Tuple[float, float, float, List[float]]:
"""
双线性插值计算
:param X_NUM: X方向点数 (整数)
:param Y_NUM: Y方向点数 (整数)
:param X: 目标X坐标 (浮点数)
:param Y: 目标Y坐标 (浮点数)
:param X0: X坐标数组 (浮点数列表)
:param Y0: Y坐标数组 (浮点数列表)
:param Z0: 二维数据数组 (numpy.ndarray, 形状为 Y_NUM x X_NUM)
:return: 元组 (Z, ZX, ZY, Z_OUT)
"""
X0_arr = np.array(X0) # 转换为NumPy数组
Z = np.interp(Y, Y0, Z0[:, np.argmin(np.abs(X0_arr - X))])
ZX = (np.interp(Y, Y0, Z0[:, np.argmin(np.abs(X0_arr - X + 0.1))]) - Z) / 0.1
ZY = (np.interp(Y + 0.1, Y0, Z0[:, np.argmin(np.abs(X0_arr - X))]) - Z) / 0.1
Z_OUT = Z0.flatten().tolist()
return Z, ZX, ZY, Z_OUT

24
app/main.http Normal file
View File

@ -0,0 +1,24 @@
### 1. 测试矩阵乘法 API
POST http://127.0.0.1:5000/api/matrix_multiply
Content-Type: application/json
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
### 2. 测试时间序列分析 API
POST http://127.0.0.1:5000/api/time_series_analysis
Content-Type: application/json
[1.2, 3.4, 5.6, 7.8, 9.0]
### 计算API
POST http://127.0.0.1:5000/PythonCalculate
Content-Type: application/json
{
"text": "{\"FuncName\":\"calculate_main\",\"ClassName\":\"\",\"Par\":[{\"Name\":\"X_NUM\",\"DataType\":\"0\",\"ArrayType\":\"0\",\"IsOut\":\"2\",\"Data\":5},{\"Name\":\"Y_NUM\",\"DataType\":\"0\",\"ArrayType\":\"0\",\"IsOut\":\"2\",\"Data\":5},{\"Name\":\"X\",\"DataType\":\"1\",\"ArrayType\":\"0\",\"IsOut\":\"2\",\"Data\":2.5},{\"Name\":\"Y\",\"DataType\":\"1\",\"ArrayType\":\"0\",\"IsOut\":\"2\",\"Data\":3.5},{\"Name\":\"X0\",\"DataType\":\"1\",\"ArrayType\":\"1\",\"IsOut\":\"2\",\"Data\":[1,2,3,4,5]},{\"Name\":\"Y0\",\"DataType\":\"1\",\"ArrayType\":\"1\",\"IsOut\":\"2\",\"Data\":[1,2,3,4,5]},{\"Name\":\"Z0\",\"DataType\":\"1\",\"ArrayType\":\"1\",\"IsOut\":\"2\",\"Data\":[1,2,3,4,5,2,3,4,5,6,3,4,5,6,7,4,5,6,7,8,5,6,7,8,9]},{\"Name\":\"Z\",\"DataType\":\"1\",\"ArrayType\":\"0\",\"IsOut\":\"1\",\"Data\":0},{\"Name\":\"ZX\",\"DataType\":\"1\",\"ArrayType\":\"0\",\"IsOut\":\"1\",\"Data\":0},{\"Name\":\"ZY\",\"DataType\":\"1\",\"ArrayType\":\"0\",\"IsOut\":\"1\",\"Data\":0},{\"Name\":\"Z_OUT\",\"DataType\":\"1\",\"ArrayType\":\"1\",\"IsOut\":\"1\",\"Data\":0}]}"
}

86
app/main.py Normal file
View File

@ -0,0 +1,86 @@
import numpy as np
from flask import Flask, request, jsonify
from flasgger import Swagger
import json
from algorithms import bilinear_interpolation
app = Flask(__name__)
# 配置 Swagger
app.config['SWAGGER'] = {
'title': '插值计算API',
'description': '提供基于双线性插值的计算服务',
'version': '1.0.0',
'uiversion': 3
}
swagger = Swagger(app)
@app.route('/PythonCalculate', methods=['POST'])
def calculate():
"""
插值计算接口
---
tags:
- 计算
parameters:
- in: body
name: body
required: true
schema:
type: object
properties:
text:
type: string
description: 包含计算参数的JSON字符串
example: '{"FuncName":"calculate_main","ClassName":"","Par":[{"name":"X_NUM","dataType":"0","arrayType":"0","isOut":"2","data":5},{"name":"Y_NUM","dataType":"0","arrayType":"0","isOut":"2","data":5},{"name":"X","dataType":"1","arrayType":"0","isOut":"2","data":2.5},{"name":"Y","dataType":"1","arrayType":"0","isOut":"2","data":3.5},{"name":"X0","dataType":"1","arrayType":"1","isOut":"2","data":[1,2,3,4,5]},{"name":"Y0","dataType":"1","arrayType":"1","isOut":"2","data":[1,2,3,4,5]},{"name":"Z0","dataType":"1","arrayType":"1","isOut":"2","data":[1,2,3,4,5,2,3,4,5,6,3,4,5,6,7,4,5,6,7,8,5,6,7,8,9]},{"name":"Z","dataType":"1","arrayType":"0","isOut":"1","data":0},{"name":"ZX","dataType":"1","arrayType":"0","isOut":"1","data":0},{"name":"ZY","dataType":"1","arrayType":"0","isOut":"1","data":0},{"name":"Z_OUT","dataType":"1","arrayType":"1","isOut":"1","data":0}]}'
responses:
200:
description: 计算结果
schema:
type: object
properties:
text:
type: string
description: 包含计算结果的JSON字符串
"""
# 解析输入JSON
request_data = request.json
input_data = json.loads(request_data["text"])
# 提取输入参数
X_NUM = input_data["Par"][0]["Data"]
Y_NUM = input_data["Par"][1]["Data"]
X = input_data["Par"][2]["Data"]
Y = input_data["Par"][3]["Data"]
X0 = input_data["Par"][4]["Data"]
Y0 = input_data["Par"][5]["Data"]
Z0 = input_data["Par"][6]["Data"]
# 调用算法函数
Z, ZX, ZY, Z_OUT = bilinear_interpolation(
X_NUM, Y_NUM, X, Y, X0, Y0, np.array(Z0).reshape(Y_NUM, X_NUM)
)
# 构建输出JSON
output_data = {
"funcName": "calculate_main",
"className": "",
"par": [
{"name": "X_NUM", "dataType": 0, "arrayType": 0, "isOut": 2, "data": X_NUM},
{"name": "Y_NUM", "dataType": 0, "arrayType": 0, "isOut": 2, "data": Y_NUM},
{"name": "X", "dataType": 1, "arrayType": 0, "isOut": 2, "data": X},
{"name": "Y", "dataType": 2, "arrayType": 0, "isOut": 2, "data": Y},
{"name": "X0", "dataType": 1, "arrayType": 1, "isOut": 2, "data": X0},
{"name": "Y0", "dataType": 1, "arrayType": 1, "isOut": 2, "data": Y0},
{"name": "Z0", "dataType": 1, "arrayType": 1, "isOut": 2, "data": Z0},
{"name": "Z", "dataType": 1, "arrayType": 0, "isOut": 1, "data": float(Z)},
{"name": "ZX", "dataType": 1, "arrayType": 0, "isOut": 1, "data": float(ZX)},
{"name": "ZY", "dataType": 1, "arrayType": 0, "isOut": 1, "data": float(ZY)},
{"name": "Z_OUT", "dataType": 1, "arrayType": 1, "isOut": 1, "data": Z_OUT}
]
}
return jsonify(output_data)
if __name__ == '__main__':
app.run(debug=True)