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

如何从多个布尔子状态数组生成仅单元素为True的布尔状态数组?

解决方案

你需要将拼接后的布尔数组转换为对应的二进制整数索引,核心思路是给每个布尔位分配对应的2的幂次权重,再求和得到目标索引。

实现代码

import numpy as np

def get_state_index(sub_states):
    # 拼接所有子状态为一维布尔数组
    concatenated = np.concatenate(sub_states)
    # 生成每个位置对应的权重:第i位对应2^i
    weights = 2 ** np.arange(concatenated.size)
    # 计算索引:布尔值转整数后乘以权重,求和
    state_index = np.sum(concatenated.astype(int) * weights)
    return state_index

验证示例

用你提供的测试数据验证:

sub_state_a = np.array([False])
sub_state_b = np.array([True])
sub_state_c = np.array([True])
sub_states = [sub_state_a, sub_state_b, sub_state_c]

index = get_state_index(sub_states)
print(index)  # 输出:6,对应二进制0b110,即第2、3位为True(从0开始计数)

逻辑说明

  • 拼接后的布尔数组每个元素对应二进制的一位,第一个元素是最低位(权重20),最后一个元素是最高位(权重2(n-1)),完全匹配你描述的规则:
    • 全False时,所有位为0,索引=0
    • 仅第一个元素为True时,索引=2^0=1
    • 仅第二个元素为True时,索引=2^1=2
    • 以此类推

优化提示

如果子状态数量较多(比如超过20个),2**np.arange()可能会溢出,此时可以改用np.left_shift或者直接用np.packbits结合字节转换,但对于游戏智能体的常规状态数量,上述方法足够高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:40:26