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

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

如何按唯一鍵拆分數組?

如何按唯一鍵拆分數組?

楊__羊羊 2022-01-05 10:57:47
我正在使用 min 函數找到數組“值”中的最小值。最低值為 1,其他均為 0。我有幾個描述性列變量:藥物、大小、強度、形式、時間。我想找到每個唯一鍵的最小值,而不是整個數組“值”中的最小值。我已經嘗試為每個列變量運行循環。def min_mask(arr):    m = np.min(arr)    return np.vectorize(lambda x: x == m)(arr).astype(int)if __name__ == '__main__':    my_arr = np.array(meltDF["value"])    print(min_mask(my_arr))
查看完整描述

2 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

您可以將元素與其列式分鐘進行比較,然后將大小寫為 uint8 以節省一些空間:


>>> import numpy as np                                                                                                                                                                                                                                     

>>> np.random.seed(444)                                                                                                                                                                                                                                 

>>> arr = np.random.rand(10, 4)                                                                                                                                                                                                                         

>>> (arr == arr.min(axis=0)).astype(np.uint8)                                                                                                                                                                                                           

array([[0, 0, 0, 0],

       [1, 0, 0, 0],

       [0, 0, 0, 0],

       [0, 0, 0, 0],

       [0, 0, 0, 0],

       [0, 0, 0, 0],

       [0, 0, 0, 0],

       [0, 0, 0, 1],

       [0, 1, 0, 0],

       [0, 0, 1, 0]], dtype=uint8)

由于 NumPy 的廣播,比較arr == arr.min(axis=0)會產生與 的形狀相同的結果arr,即使arr.min(axis=0)會有形狀(4,)。


請注意,如果列有重復的最小值,這可能會在單個列中生成多個“1”。


查看完整回答
反對 回復 2022-01-05
?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

這里有很多選項,例如:


1) 預先初始化掩碼并使用argmin填入合適的地方:


arr = np.random.rand(10, 4)

indices = np.argmin(arr, axis=0)

mask = np.zeros_like(arr, dtype=np.int)

mask[indices, range(len(indices))] = 1

2) Usingapply_along_axis可能是你喜歡的風格:


def is_minimum(v):

    return v == np.min(v)


mask = np.apply_along_axis(is_minimum, axis=0, arr=arr).astype(np.int)

這些解決方案假設每一列對應一個唯一的鍵。


查看完整回答
反對 回復 2022-01-05
  • 2 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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