numpy.extract()结果与预期不同

时间:2020-04-26 11:13:57

标签: python numpy extract

对于下面的数组,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 :(得分:0)

获得[0,0]答案的原因是因为np.extract要求条件中的数组与传递给第二个参数的数组具有相同的形状。 perm_list [:, 2]的形状与perm_list不同。以下内容对此进行了更正,并按照mkieger1的说明返回[2,2]。下面的代码返回您正在寻找的答案。

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]),)