ndarray中的条件判断

2020年7月10日 / 34次阅读 / Last Modified 2020年7月10日
NumPy

ndarray与条件判断结合,可以很方便的将符合条件的数据取出来。

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

a的ndim是2,用条件判断取出来的新的ndarray,ndim是1.

如果用ndarray直接做条件判断,会得到一个全是True和False的shape一样的ndarray:

>>> a
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
>>> a>3
array([[False, False, False, False,  True],
       [ True,  True,  True,  True,  True]])
>>> a>5
array([[False, False, False, False, False],
       [False,  True,  True,  True,  True]])
>>> a>7
array([[False, False, False, False, False],
       [False, False, False,  True,  True]])

很有趣吧。。因为对ndarray的操作是elementwise的。

如果再配合上np.nonzero函数,就可以把符合我们条件的数据的位置找出来。比如这个找出所有大于6的数据的位置:

>>> a
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])
>>> b = (a>6)
>>> b
array([[False, False, False, False, False],
       [False, False,  True,  True,  True]])
>>> c = np.nonzero(b)
>>> c
(array([1, 1, 1], dtype=int64), array([2, 3, 4], dtype=int64))
>>> for x,y in zip(c[0],c[1]):
...   print(x,y)
...
1 2
1 3
1 4
>>> a[1,2]
7
>>> a[1,3]
8
>>> a[1,4]
9

c[0]和c[1]对应起来就是位置。

下面再试一个3D的ndarray,找出所有大于6并小于16的数据位置:

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

       [[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])
>>> a.shape
(2, 3, 4)
>>> b = (a>6)&(a<16)
>>> b
array([[[False, False, False, False],
        [False, False, False,  True],
        [ True,  True,  True,  True]],

       [[ True,  True,  True,  True],
        [False, False, False, False],
        [False, False, False, False]]])
>>> c = np.nonzero(b)
>>> c
(array([0, 0, 0, 0, 0, 1, 1, 1, 1], dtype=int64), array([1, 2, 2, 2, 2, 0, 0, 0,
 0], dtype=int64), array([3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
>>> for x,y,z in zip(c[0],c[1],c[2]):
...   print(x,y,z)
...
0 1 3
0 2 0
0 2 1
0 2 2
0 2 3
1 0 0
1 0 1
1 0 2
1 0 3
>>> a[0,1,3]
7
>>> a[0,2,0]
8
>>> a[0,2,1]
9
>>> a[1,0,2]
14
>>> a[1,0,3]
15

-- EOF --

本文链接:https://www.pynote.net/archives/2226

留言区

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

More


©Copyright 麦新杰 Since 2019 Python笔记

go to top