为了账号安全,请及时绑定邮箱和手机立即绑定

如何按唯一键拆分数组?

如何按唯一键拆分数组?

杨__羊羊 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 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信