You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Skfuzzy批量处理数组输入以计算脆弱性值?

使用Skfuzzy批量处理数组输入计算脆弱性值

问题背景

我正在用Skfuzzy处理两个数组:

  • 到溪流的距离数组dist
  • Strahler级数数组order

希望借助自定义的前件、后件隶属度值,为每一组距离与Strahler级数的配对计算对应的脆弱性值。目前程序仅支持单个输入值的计算,不清楚如何让Skfuzzy循环处理数组输入,输出每对值对应的后件结果。

现有代码与报错

控制系统代码

# Creation of control system using the defined rules
vulnerability_ctrl = ctrl.ControlSystem([rule1, rule2, rule3])
vulnerability = ctrl.ControlSystemSimulation(vulnerability_ctrl)

错误的输入计算代码

# input of distance and Strahler order arrays
vulnerability.input[dist]
vulnerability.input[order]
vulnerability.compute()

报错信息

TypeError: '_InputAcceptor' object is not subscriptable

解决方案

vulnerability.input是Skfuzzy的_InputAcceptor对象,不支持直接用下标赋值数组,必须通过循环逐个处理每一对输入值:

实现步骤

  1. 确保dist和order是长度一致的数组(Python列表或Numpy数组均可)
  2. 遍历每一对输入值,逐个传入仿真对象计算
  3. 收集每一次计算的结果

示例代码

import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl

# 假设已完成模糊变量(前件、后件)和规则(rule1/rule2/rule3)的定义
# 初始化控制系统与仿真实例
vulnerability_ctrl = ctrl.ControlSystem([rule1, rule2, rule3])
vulnerability = ctrl.ControlSystemSimulation(vulnerability_ctrl)

# 替换为你的实际输入数组
dist = np.array([10, 20, 30, 40])
order = np.array([1, 2, 3, 2])

# 存储结果的容器
vulnerability_results = []

# 循环处理每一组输入
for d, o in zip(dist, order):
    # 传入单个输入值(注意替换为你定义的模糊变量名称)
    vulnerability.input['distance'] = d
    vulnerability.input['strahler_order'] = o
    # 执行模糊计算
    vulnerability.compute()
    # 提取结果并保存
    vulnerability_results.append(vulnerability.output['vulnerability'])

# 输出所有配对的脆弱性值
print(vulnerability_results)

关键注意事项

  • 务必将代码中的distance、strahler_order、vulnerability替换为你实际定义的模糊变量名称
  • Skfuzzy无内置批量处理接口,循环是最直接的实现方式
  • 无需每次循环重新创建ControlSystemSimulation对象,复用同一个实例即可,每次compute()后会自动重置状态

内容的提问来源于stack exchange,提问作者GEobserver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:36:07