第12节,对numpy数组里的元素进行过滤

1. 对ndarray元素进行过滤

首先创建一个ndarray

import numpy as np

array = np.arange(1, 9)
array = array[array % 2==0]
print(array)        # [2 4 6 8]

上面的代码从array中过滤偶数组成新的ndarray,我们该如何理解这段代码呢?首先,我们先要弄清楚中括号里的操作

import numpy as np

array = np.arange(1, 9)
print(array % 2==0)     # [False  True False  True False  True False  True]

有了ndarray广播功能的基础,这段代码不是特别难理解,数组里的每个元素都对2取模然后和0比较是否相等,计算结果是bool类型,于是得到了一个新的数组,且这个数组的维度与array是相同的。

array = array[array % 2==0]

这段代码等价于

array = np.arange(1, 9)
filter = np.array([False,  True, False,  True, False,  True, False,  True])
array = array[filter]
print(array)    # [2 4 6 8]

filter数组的元素如果为True,则array对应索引位置的元素被保留下来,否则被剔除,这样就得到了过滤后的新数组。

2. &and| 运算符

我们还可以使用&and| 运算符进行更加复杂的计算

import numpy as np

array = np.arange(1, 9)
array_1 = array[(array > 3) & (array % 2 == 0)]
print(array_1)  # [4 6 8]

array_2 = array[(array > 6) | (array % 2 == 0)]
print(array_2)  # [2 4 6 7 8]

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案