假设我有一个这样的数组:
from skopt.space import Space
from skopt.sampler import Lhs
import numpy as np
np.random.seed(42)
rows = 5
cols = 3
dummy = np.zeros((rows, cols))
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
我现在想用skopt.Lhs.generate
一个来填充这个数组的某些位置1
,我想排除存储在的某些位置ignore
:
ignore = np.array([
[3, 1],
[4, 1]
])
我将如何做到最好?
我可以
space = Space([(0, rows - 1), (0, cols - 1)])
lhs = Lhs(criterion="maximin", iterations=1000)
lh = np.array(lhs.generate(space.dimensions, 3))
dummy[lh[:, 0], lh[:, 1]] = 1
这使
array([[0., 0., 1.],
[1., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 1., 0.]])
但是正如人们所看到的那样,该职位4, 1
已被占用,但不应如此。
一种方法是将lhs.generate
调用放在while
循环中,然后始终检查是否有任何元素,ignore
但我想知道是否有更直接的解决方案。