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

如何实现100个(8,8,8)二值数组确定性赋值:每阵固定40%元素为0

确定占比的二值数组生成方案

首先明确计算前提:单个(8,8,8)子数组的总元素数为8*8*8=512,40%占比对应的0的数量为512*0.4=204.8,不是整数,我们取四舍五入后的205个0(对应占比约40.04%,误差可忽略),剩余307个为1。如果你需要完全无比例误差,需要调整数组总元素数为5的倍数。

实现代码

import numpy as np

num1 = 100
elem_per_sub = 8 ** 3
n_zero = int(np.round(elem_per_sub * 0.4))
n_one = elem_per_sub - n_zero

# 生成基础数组:每个子数组的元素平铺后前n_zero位为0,剩余为1
base_arr = np.repeat([[0] * n_zero + [1] * n_one], num1, axis=0)

# 对每个子数组的元素做随机打乱
rng = np.random.default_rng()
shuffled_arr = rng.permuted(base_arr, axis=1)

# 调整为目标形状
P = shuffled_arr.reshape(num1, 8, 8, 8)

兼容方案(numpy版本低于1.20无permuted方法)

将打乱步骤替换为以下代码即可:

shuffled_arr = np.apply_along_axis(np.random.permutation, 1, base_arr)

结果验证

可以通过以下代码确认所有子数组的0数量符合要求:

# 统计每个子数组的0元素个数
zero_cnt = (P == 0).sum(axis=(1,2,3))
print(np.unique(zero_cnt))
# 输出应为[205],代表所有子数组的0数量都符合预设值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:45:02