2024-04-23 10:33:37 发布
网友
我有一个多维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], ]
def update(arr, items): count = 0 for i, x in enumerate(arr): if None in x: arr[i][x.index(None)] = items[count] count += 1 return arr import itertools ls = [9, 8] ls_ = list(itertools.permutations(ls)) for items in ls_: arr = [[1, None, 3], [9, 4, None]] print (update(arr,items))
输出:
[[1, 9, 3], [9, 4, 8]] [[1, 8, 3], [9, 4, 9]]
例如:ls = [9, 8, 15]
ls = [9, 8, 15]
[[1, 9, 3], [9, 4, 8]] [[1, 9, 3], [9, 4, 15]] [[1, 8, 3], [9, 4, 9]] [[1, 8, 3], [9, 4, 15]] [[1, 15, 3], [9, 4, 9]] [[1, 15, 3], [9, 4, 8]]
一种方法是使用掩码用ls中的值填充数组的无效项,与ls中的^{置换的次数相同。你知道吗
ls
但是,通过将这些排列的长度设置为arr中无效项的数量,可以使这种方法更加健壮。这样我们也可以解释这种情况。你知道吗
arr
可使用^{}获得排列:
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]])]
输出:
例如:
ls = [9, 8, 15]
输出:
一种方法是使用掩码用
ls
中的值填充数组的无效项,与ls
中的^{置换的次数相同。你知道吗但是,通过将这些排列的长度设置为
arr
中无效项的数量,可以使这种方法更加健壮。这样我们也可以解释这种情况。你知道吗可使用^{} 获得排列:
运行示例:
输出:
或者对于更大的
ls
:相关问题 更多 >
编程相关推荐