Python:上下对齐bool numpy数组的索引

2024-04-26 14:40:50 发布

您现在位置:Python中文网/ 问答频道 /正文

如何上下调整numpy bool数组。所谓对齐,我的意思是取真值,移动它们,使它们要么是顶部的第一个值(如果它们向上对齐),要么是底部的第一个值。(如果它们向下对齐)

    [[False  True  True  True  True   True]
     [False  False True  True  False  True]
     [False  True  False True  False  False
     [True   True  True  True  False  True]]

因此,如果我向下对齐上面显示的bool数组的真值,它将如下所示:

[[False  False False True  False False]
 [False  True  True  True  False True]
 [False  True  True  True  False True]
 [True   True  True  True  True  True]]

Tags: numpyfalsetrue数组bool真值
2条回答

看起来你想把第一个数组移到后面去做你所谓的“向上证明”。我认为在numpy数组中重新排列元素有点困难,所以我通常转换为标准python列表,重新排列元素,然后转换回numpy数组。你知道吗

def up_justify(np_array):
    list_array = list(np_array)
    first_list = list_array.pop(0) #removes first list
    list_array.append(first_list) #adds list to back
    return np.array(list_array)

类似地,您可以通过删除最后一个列表并将其放在前面来向下对齐,如下所示

def down_justify(np_array):
    list_array = list(np_array)
    last_element = list_array.pop()
    return np.array([last_element] + list_array)

只需沿着每一列对其排序,这将向下推送真值,而对于向下对齐的版本,将向上推送假值。对于向上对齐的版本,在排序的版本上进行翻转。你知道吗

演示实现的示例运行-

In [216]: mask
Out[216]: 
array([[False,  True,  True,  True,  True,  True],
       [False, False,  True,  True, False,  True],
       [False,  True, False,  True, False, False],
       [ True,  True,  True,  True, False,  True]], dtype=bool)

In [217]: np.sort(mask,0)  # Down justified
Out[217]: 
array([[False, False, False,  True, False, False],
       [False,  True,  True,  True, False,  True],
       [False,  True,  True,  True, False,  True],
       [ True,  True,  True,  True,  True,  True]], dtype=bool)

In [218]: np.sort(mask,0)[::-1]   # Up justified
Out[218]: 
array([[ True,  True,  True,  True,  True,  True],
       [False,  True,  True,  True, False,  True],
       [False,  True,  True,  True, False,  True],
       [False, False, False,  True, False, False]], dtype=bool)

相关问题 更多 >