如何获得numpy数组中非零值的位置?

2024-09-29 07:20:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用np.非零()我不明白回报

我尽力了

for groupPosition in np.nonzero(groupMatrix):
    print groupPosition

返回[0 0 1 2 3 3 3]

^{pr2}$

并返回(数组([0,1,0,3,0,1,3]),)

群组矩阵:

[[ 1.  1.  0.  0.]
[ 1.  0.  0.  0.]
[ 0.  0.  0.  2.]
[ 3.  3.  0.  2.]]

但不要像a(0,0)那样返回位置


Tags: infornp矩阵数组print群组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]
]

rows, cols = np.nonzero(var)

for r, c in zip(rows, cols):
    print var[r][c]

退货:

^{pr2}$

您得到的结果是,因为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,在相应的索引中看不到另一个{}。在

>>> 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(*...)

^{pr2}$

{{cd2>

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

^{}。在

相关问题 更多 >