如何解决生成一个可以说明某些条件的数组
我正在尝试生成一个满足以下条件的3维数组:
- 对于每个子二维数组,其各自行和列的总和必须小于1;
- 对于这些相同的子2D阵列,其所有组件中的某些组件也必须小于1;
- 每个元素必须小于1。
例如,考虑一个2x2x2数组。然后,两个2x2数组(我称为子数组)必须满足上述两个条件。
我尝试使用以下拒绝方法解决此问题:
while done == False:
array = np.random.randint(0,100,size=(2,2,2))*(1/100)
c1 = condition1(array) # returns True is condition 1 is satisfied
c2 = condition2(array) # returns True is condition 2 is satisfied
if c1 == True and c2 == True:
done = True
这个问题是找到解决方案需要太多时间,我需要对4维和5维数组重复此过程。而且,稍后我将有另一个约束要添加到这个问题上,但一次只能做一件事!
解决方法
您可以做的是先从1xC向量开始,然后将其转换为NxN矩阵(其中N ** 2 = C)。在代码中,看起来像这样:
N = 2 # Preferred sub matrix size
C = N ** 2
a = np.random.uniform(0,1,(1,C)) # Generate uniform vector
a /= a.sum() # Normalize elements such that they sum to 1
a -= np.min(a) / 2 # Decrease every element by the minimum divided by 2 to make the sum less than one
a = a.reshape(N,N) # Reshape matrix
在这里,我们对向量进行归一化以使元素之和为1,然后用向量除以2的最小值减去每个元素,然后对向量进行整形以适合子矩阵的大小。应该重复此过程N次以获取NxNxN矩阵,并且应该堆叠结果子矩阵以获取3D矩阵。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。