我有一个1乘N和一个N乘1数组。在
至于Lin,我们都知道,当这两个相乘时,我们得到的是1乘1或一个值。在
N是我们想要的值。但是我想随机生成第一个数组,而第二个数组有权重。这是一个运筹学问题。在
[第0随机,第1随机,N-1随机]*[[0],[1],[2],…,[N-1]]
我的代码是这样的:
import itertools
import numpy as np
N = 4
winner = 0
A = np.array(list(itertools.product(range(N-1), repeat = N-1)))
V_weights = np.arange(1, N, 1).reshape(N-1,1)
for array in A:
if array.dot(V_weights) == N:
# print(array)
# print(V_weights)
# print(array.dot(V_weights))
winner += 1
print(winner)
我希望while循环在所有组合完成后结束。理想情况下是正确的迭代量。在
例如:我有4种原木,1磅,2磅,3磅,4磅,需要的木材总量(比如10磅)
这就给了我几种木材类型的组合:
10 1磅 3磅,2磅,13磅 阿尔索 2磅,13磅,15磅
等等
因此,我想我会生成随机数组,直到我得到所有的操作。在
抱歉,如果这有点混乱-很高兴编辑,除非有人需要一个更快更简单的方法。在
请看一下对choice的调用集:
注意[1,3,2]出现了两次。在
这将从这个范围产生所有长度为3的排列(不是以随机顺序排列-尽管列表可以被无序排列)
^{pr2}$这些排列的加权值:
根据你的评论,我意识到你正在用替代品抽样。这里有一个快速的暴力方式来做这样的搜索
生成一组测试值。由于这是对每一行进行替换,因此我们只需调用一次
choice
,就可以生成许多行:如前所述,取加权和:
并找出该总和具有目标值的指数:
对于
N=5
:这个样本不够大,让我们试试大一点的:
^{8}$itertools.product
可用于通用所有组合N=5时:
为了迭代地进行搜索,我将使用
product
作为生成器:或者只找到第一个:
相关问题 更多 >
编程相关推荐