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

如何将形状为(3,32,32,32)的4维1bit数组合并为3维32bit数组?

合并4维1bit数组为3维32bit数组

核心思路

把最后一维的32个二进制位按对应权重累加,每个bit对应2^k的权重(k由该bit在32位整数中的位置决定),最终得到每个位置的32bit整数。

NumPy实现示例

假设你的数组是NumPy格式,以下是两种常见位序的处理方式:

情况1:最后一维索引0对应32位整数的最高位(第31位),索引31对应最低位(第0位)

import numpy as np

# 生成示例4维1bit数组(替换成你的实际数组)
bit_array = np.random.randint(0, 2, (3, 32, 32, 32), dtype=np.uint8)

# 生成对应权重:2^31, 2^30, ..., 2^0
weights = 2 ** np.arange(31, -1, -1, dtype=np.int32)

# 按位累加得到3维32bit数组
result = bit_array.dot(weights).astype(np.int32)
# 若需要无符号整数,改用np.uint32

情况2:最后一维索引0对应32位整数的最低位(第0位),索引31对应最高位(第31位)

只需调整权重数组的顺序:

weights = 2 ** np.arange(32, dtype=np.int32)
result = bit_array.dot(weights).astype(np.int32)

PyTorch实现示例(若用深度学习框架)

import torch

bit_tensor = torch.randint(0, 2, (3, 32, 32, 32), dtype=torch.uint8)
weights = torch.tensor(2 ** torch.arange(31, -1, -1), dtype=torch.int32)

# 调整维度后做矩阵乘法
result = bit_tensor.to(torch.int32).matmul(weights).view(3, 32, 32)

说明

  • dot/matmul操作会自动将最后一维的32个bit与权重相乘后求和,直接压缩最后一维,得到目标形状(3,32,32)。
  • 数据类型选择int32或uint32取决于你需要有符号还是无符号的32位整数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:55:13