对于下面的数组,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]
答案 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]),)