我正在使用np.nonzero(),我不理解返回
我试试
for groupPosition in np.nonzero(groupMatrix):
print groupPosition
并返回[0 0 1 2 3 3 3]
for groupPosition in zip(np.nonzero(groupMatrix)):
print groupPosition
并返回(数组([0,1,0,3,0,1,3]),)
groupMatrix:
[[ 1. 1. 0. 0.]
[ 1. 0. 0. 0.]
[ 0. 0. 0. 2.]
[ 3. 3. 0. 2.]]
但是不要像(0,0)
那样返回位置答案 0 :(得分:4)
>>> import numpy as np
>>>
>>> groupMatrix = np.array([
... [1, 1, 0, 0],
... [1, 0, 0, 0],
... [0, 0, 0, 2],
... [3, 3, 0, 2]
... ])
>>> np.nonzero(groupMatrix)
(array([0, 0, 1, 2, 3, 3, 3], dtype=int64), array([0, 1, 0, 3, 0, 1, 3], dtype=int64))
>>> zip(np.nonzero(groupMatrix))
[(array([0, 0, 1, 2, 3, 3, 3], dtype=int64),), (array([0, 1, 0, 3, 0, 1, 3], dtype=int64),)]
使用zip(*...)
:
>>> zip(*np.nonzero(groupMatrix))
[(0, 0), (0, 1), (1, 0), (2, 3), (3, 0), (3, 1), (3, 3)]
zip(*a)
与zip(a[0], a[1], ...)
>>> a = [(0, 1, 2), (3, 4, 5)]
>>> zip(a)
[((0, 1, 2),), ((3, 4, 5),)]
>>> zip(a[0], a[1])
[(0, 3), (1, 4), (2, 5)]
>>> zip(*a)
[(0, 3), (1, 4), (2, 5)]
答案 1 :(得分:1)
尝试以下方法:
import numpy as np
var = [
[1.0, 1.0, 0.0, 0.0],
[1.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 2.0],
[3.0, 3.0, 0.0, 2.0]
]
rows, cols = np.nonzero(var)
for r, c in zip(rows, cols):
print var[r][c]
返回:
1.0
1.0
1.0
2.0
3.0
3.0
2.0
你得到的结果因为 np.nonzero
返回一个元组,因为你的数组有2个维度,它有两个数组。现在,每个这些数组都需要一起使用,所以在我的例子中,函数返回行号,然后是列号。让我们来看看:
>>> import numpy as np
>>> var = [
[1.0, 1.0, 0.0, 0.0],
[1.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 2.0],
[3.0, 3.0, 0.0, 2.0]
]
>>>
>>> non_zeroes = np.nonzero(var)
>>> non_zeroes
(array([0, 0, 1, 2, 3, 3, 3]), array([0, 1, 0, 3, 0, 1, 3]))
如果我们仔细观察,我们可以看到var[0][0]
确实不为零。 var[3][3]
也是如此。但是,您不会在第一个元组中看到2
,在相应的索引处看到另一个2
。