亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找數組中某些元素的所有組合

查找數組中某些元素的所有組合

九州編程 2021-12-17 17:00:16
我有一個多維 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],]
查看完整描述

2 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

一種方法是使用掩碼用 中的值填充數組的無效條目,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]])]


查看完整回答
反對 回復 2021-12-17
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

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]


輸出:


[[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]]


查看完整回答
反對 回復 2021-12-17
  • 2 回答
  • 0 關注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號