python - 查找数组中某些元素的所有组合
问题描述
我有一个多维 numpy 数组和一个对象列表,一些 numpy 数组的值是 None
找到所有可能的组合以用列表中的对象填充 None 值的最佳方法是什么?
例如,如果我的数组是
arr = [
[1, None, 3],
[9, 4, None],
]
清单是
ls = [9, 8]
我想找到这些
arr = [
[1, 9, 3],
[9, 4, 8],
]
arr = [
[1, 8, 3],
[9, 4, 9],
]
解决方案
一种方法是使用掩码用 中的值填充数组的无效条目,ls
次数与 中的排列一样多ls
。
但是,通过将这些排列的长度设置为arr
. 这样我们也就占了案子len(ls) > (x == None).sum()
。
可以使用以下方法获得排列itertools.permutations
:
def fill_combs(x, fill, replace=None):
from itertools import permutations
m = x == replace
for i in permutations(fill, int(m.sum())):
x_ = x.copy()
x_[m] = np.array(i)
yield x_.astype(int)
样品运行:
arr = np.array([
[1, None, 3],
[9, 4, None],
])
ls = [9, 8]
list(fill_with_permut(arr, ls))
输出:
[array([[1, 9, 3],
[9, 4, 8]]),
array([[1, 8, 3],
[9, 4, 9]])]
或者更大的ls
:
ls = [3,5,2]
list(fill_with_permut(arr, ls))
[array([[1, 3, 3],
[9, 4, 5]]),
array([[1, 3, 3],
[9, 4, 2]]),
array([[1, 5, 3],
[9, 4, 3]]),
array([[1, 5, 3],
[9, 4, 2]]),
array([[1, 2, 3],
[9, 4, 3]]),
array([[1, 2, 3],
[9, 4, 5]])]
推荐阅读
- javascript - 从 JSX 按钮调用另一个文件的类函数
- javascript - ReactJS - 使用 redux-saga 发送一个空对象
- selenium - 无法从网络日志中获取 HTTP 响应正文 - Selenium
- r - 将两个矩阵相乘时出现不一致的数组错误 (*%*)
- python - 通知不断发布到松弛频道
- node.js - 将 cookie 文件传入 curl 请求 nodejs
- sql - 根据最小和最大日期时间附加名称
- c# - 在 .net 核心中获取访问令牌
- java - JavaFX FileChooser 行为在组合扩展上不一致
- javascript - 将按钮的文本从“复制”转换为“已复制”,然后在几秒钟后返回“复制”