numpy .extract () результат отличается от ожидаемого - PullRequest
0 голосов
/ 26 апреля 2020

Для массива ниже np.extract выдает результат [0,0], а для других массивов - число строк, для которых выполняется условие. Поэтому для этого я бы ожидал [3,6] в качестве результата.

Не могли бы вы взглянуть, чтобы выяснить, какая часть неисправна?

print(type(perm_list))
<class 'numpy.ndarray'>
print(perm_list.shape)
(8, 5)
print(perm_list)
[[0 0 0 0 0]
 [0 0 0 0 0]
 [4 7 0 0 0]
 [2 6 2 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]
 [2 6 2 0 0]
 [4 7 0 0 0]]

perm_list_mask = np.extract(perm_list[:, 2] == 2, perm_list)
print(perm_list_mask)
[0 0]

Вот еще один массив Я использую в своем сценарии, и он работает без проблем:

a = np.array([[0, 1,  2, 3], [4,  5,  6,  7], [8, 9, 10, 11], [8,  10,  4, 3], [8,  1,  5, 5]])

b = np.extract(a[:, 0] == 8, a)
print(b)
[2 3 4]

1 Ответ

0 голосов
/ 26 апреля 2020

Причина, по которой вы получаете [0,0] за ответ, заключается в том, что np.extract требует, чтобы массив в условии имел ту же форму, что и массив, передаваемый во второй аргумент. perm_list [:, 2] отличается по форме от perm_list. Ниже это исправляет и возвращает [2,2], как говорит mkieger1. Ниже приведен код, который возвращает ответ, который вы ищете.

def p():
    perm_list = np.array([[0,0,0,0,0],[0,0,0,0,0],[4,7,0,0,0],[2,6,2,0,0],[0,0,0,0,0],[0,0,0,0,0],[2,6,2,0,0],[4,7,0,0,0]]) 
    perm_list_mask = np.extract(perm_list[:, 2] == 2, perm_list[:,2])
    print(perm_list_mask)


def pSolved():
    perm_list = np.array([[0,0,0,0,0],[0,0,0,0,0],[4,7,0,0,0],[2,6,2,0,0],[0,0,0,0,0],[0,0,0,0,0],[2,6,2,0,0],[4,7,0,0,0]]) 
    return np.where(perm_list[:, 2] == 2)

Выход:

>>> p()
[2 2]
>>> pSolved()
(array([3, 6]),)
...