Определите, находится ли какое-либо значение выше нуля, и измените его - PullRequest
0 голосов
/ 10 июля 2019

У меня есть следующий массив:

[(True,False,True), (False,False,False), (False,False,True)]

Если какой-либо элемент содержит True, то все они должны быть истинными.Таким образом, вышеприведенное должно выглядеть так:

[(True,True,True), (False,False,False), (True,True,True)]

Мой код ниже пытается это сделать, но он просто преобразует все элементы в True:

a = np.array([(True,False,True), (False,False,False), (False,True,False)], dtype='bool')
aint = a.astype('int')
print(aint)
aint[aint.sum() > 0] = (1,1,1)
print(aint.astype('bool'))

Вывод:

[[1 0 1]
 [0 0 0]
 [0 1 0]]

[[ True  True  True]
 [ True  True  True]
 [ True  True  True]]

Ответы [ 4 ]

2 голосов
/ 10 июля 2019

Вы можете попробовать np.any, который проверяет, имеет ли какой-либо элемент массива вдоль заданной оси значение True .

Вот небольшая строка кода, которая использует понимание списка, чтобы получить желаемый результат.

lst = [(True,False,True), (False,False,False), (False,False,True)]
result = [(np.any(x),) * len(x) for x in lst]

# result is [(True, True, True), (False, False, False), (True, True, True)]
0 голосов
/ 10 июля 2019

Создайте массив из True на основе второго измерения исходного массива и назначьте его всем строкам, в которых есть True.

>>> a
array([[ True, False,  True],
       [False, False, False],
       [False,  True, False]])

>>> a[a.any(1)] = np.ones(a.shape[1], dtype=bool)
>>> a
array([[ True,  True,  True],
       [False, False, False],
       [ True,  True,  True]])
>>>

Полагается на Вещание .

0 голосов
/ 10 июля 2019

ndarray.any по axis=1 и np.tile выполнят работу

np.tile(a.any(1)[:,None], a.shape[1])

array([[ True,  True,  True],
       [False, False, False],
       [ True,  True,  True]])
0 голосов
/ 10 июля 2019

Я не numpy волшебник, но это должно вернуть то, что вы хотите.

import numpy as np

def switch(arr):
    if np.any(arr):
        return np.ones(*arr.shape).astype(bool)
    return arr.astype(bool)

np.apply_along_axis(switch, 1, a)

array([[ True,  True,  True],
       [False, False, False],
       [ True,  True,  True]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...