我正在寻找一个numpy数组随机初始化0和1,我发现下面的问题here,描述了基本的随机数组和如何控制的尺寸。但是,我需要数组在嵌套轴的每个子数组上至少有一个“1”。参见示例:
import numpy as np
size = (3, 5, 5)
proba_0 = 0.7
n_positions = np.random.choice([0,1], size=size, p=[proba_0, 1-proba_0])
print(n_positions)
[[[0 1 1 0 0]
[0 0 0 0 0]
[0 0 0 1 1]
[1 0 0 0 0]
[0 1 0 0 0]]
[[0 1 1 1 1]
[0 0 1 1 0]
[1 0 0 1 1]
[0 0 1 0 0]
[0 1 0 1 1]]
[[0 0 0 0 1]
[0 0 1 0 1]
[0 0 0 0 1]
[0 0 0 1 0]
[0 0 0 0 0]]]
字符串
这里的问题是,在这个数组n_positions[0][1]
中的以下位置,数据只填充了零。我需要在轴2上的每一行中至少有一个'1'。我可以增加1发生的概率,但这并不能消除风险。
我可以用一个循环或一个理解来实现这一点,使用一个方法,让numpy生成一个1-5之间的随机数,然后用零填充,但它非常慢。我希望有一个更numpy友好的方法内置实现这一点?
1条答案
按热度按时间zed5wv101#
一个解决方案(如果您只想填充最后一个轴。如果你想对所有的轴都这样做,那么你需要对所有的轴重复它,我猜)
字符串
测试:
型
展会
型
可以看到,平面0的第3行和平面1的第1行之前缺少1。然后有一个(在位置1和2)。
具有更高的维度(用更多的轴进行测试,并降低这只是运气的概率)。这一次我强迫种子,这样你就可以在家里测试,并检查结果,而不需要我打印整个数组,因为你有相同的。
型
如果我是正确的,结果中有3行全0(
[0,2,1,:]
,[2,0,3,:]
和[2,4,3,:]
)。它们后面都是随机的1。