首页 > 解决方案 > 数组元素赋值

问题描述

我打算创建 100 个形状为 (8, 8, 8) 的二进制数组,使其每个数组的大约 40% 的元素为零,其余为 1。我有以下代码:

num1=100
size = (num1, 8, 8, 8)
prob_0 = 0.4 # 40% of zeros
prob_1 = 1 - prob_0 # 60% of ones
P = np.random.choice([0, 1], size=size, p=[prob_0, prob_1])

但是,它是概率性的,我正在寻找它的确定性版本。

进一步阐述:在上面的代码中,理论上我有可能得到一个所有元素都为 1 的数组。我正在寻找的是一种控制值分配的方法,我只能得到只有 40% 的元素为 0 其余为 1 的数组。换句话说,每个 (8, 8, 8 ) 数组应该有恒定数量的 1 和 0。

标签: pythonnumpymath

解决方案


只需使用 numpy 的生成器即可获得确定性结果。这就是您每次运行都可以获得完全相同的数组的方法。

from numpy.random import default_rng

rng = default_rng(42)    # default random generator

num1=100
size = (num1, 8, 8, 8)
prob_0 = 0.4 # 40% of zeros
prob_1 = 1 - prob_0 # 60% of ones
P = rng.choice([0, 1], size=size, p=[prob_0, prob_1])

推荐阅读