1.神奇索引:
在上一个博客中讲到,一些索引的使用方法,但是当遇到一些特殊的需求的时候,就不能实现数据的快速索引和修改了。因此,这里我们引出神奇索引。利用布尔值进行索引。以下是演示的实例。
注意,当我们使用神奇索引来取数据的时候,只能返回一个一维数组。其中满足条件的元素存在在一维数组中。存在降维现象。
2.Numpy的逻辑运算
1.np.any(a)
a:传入一个全部由bool值组成的数组
return:当数组中的布尔值中存在True时,返回True;当数组中的布尔值全为False时候,返回False。
2.np.all(a)
a:传入一个全部由bool值组成的数组
return:当数组中的布尔值全为True时,返回True;当数组中的布尔值存在False时候,返回False。
3.np.where(condition, x, y)
condition:传入一个元素全为布尔值的数组。
x:当满足该条件的位置的元素置为a
y:当不满住该条件的位置的元素置为b
return:返回一个处理好的数组。
4.np.logical_and(x1, x2)
x1:条件一
x2:条件二
return:返回一个满足“与”逻辑的布尔数组
5.np.logical_or(x1, x2)
x1:条件一
x2:条件二
return:返回一个满足“或”逻辑的布尔数组
6.np.logical_not(x)
x:条件
return:返回一个满足“非”逻辑的布尔数组
注意:
Numpy逻辑“与或非”函数(4, 5, 6函数)存在的原因,就是python中的保留了字and、or、not不能使用在ndarray中。因此,当对ndarray进行逻辑操作的时候,并不能采用python中的保留字,应该使用函数4、5、6。
通过函数1、2我们可以对整个全局的元素的范围有一个大致的了解
通过函数3,我们可以快速修改数组中的元素
通过函数4、5、6再配合函数3或者神奇索引,我们也可以完成一些酷炫的操作
神奇索引
代码:
# 这里我们实现一个需求,取出data中满足大于1.5的元素
# 注意存在降维现象
import numpy as np
np.random.seed(22)
data = np.random.uniform(-1, 2, size=100)
print('data:\n', data)
print('需求实现:\n', data[data > 1.5])
输出:
data: [-0.37461839 0.44504319 0.26161411 1.577546 -0.48651534 0.01659188 -0.1884015 1.07312405 -0.33878645 1.43585276 -0.96841938 0.68361109 1.44117856 1.23530089 -0.43266593 -0.9815774 1.31613161 1.8734965 1.10581365 -0.1072652 1.30397823 1.06465497 0.16155044 0.84561748 0.28266572 0.75286893 1.10790656 -0.66431448 1.76980978 1.96665882 1.03223232 1.38549433 -0.91277095 -0.46672279 1.62478324 1.23479623 0.52427049 -0.61499829 0.45285272 0.54732046 -0.06620601 -0.86301537 0.31304198 -0.71234617 -0.86436966 1.05448616 1.54757224 -0.62437845 -0.61280798 0.41918001 -0.40732447 1.34486825 0.82224159 0.33050028 1.94608733 1.12686624 -0.34380875 -0.49753511 0.61629642 -0.05973764 1.73461099 -0.74123296 -0.05777791 -0.34258791 1.20999869 1.48562109 1.23369339 -0.46738889 1.57535959 -0.98346276 0.07292951 1.85944475 1.82532916 -0.93085296 1.01904799 -0.507657 0.70439711 -0.27363113 -0.52643226 0.51068846 0.71538544 0.40985724 0.52450172 -0.02874517 1.65949507 -0.24449347 1.58626344 0.90558857 1.09166954 -0.90863922 0.97193391 1.99796726 0.51963643 1.79793725 0.32240861 -0.39991405 1.4115607 1.42301618 -0.82614139 1.37091811] 需求实现: [1.577546 1.8734965 1.76980978 1.96665882 1.62478324 1.54757224 1.94608733 1.73461099 1.57535959 1.85944475 1.82532916 1.65949507 1.58626344 1.99796726 1.79793725]
Numpy的逻辑运算
代码:
import numpy as np
# 数据
np.random.seed(22)
data = np.random.uniform(-1, 2, size=100)
print('data:\n', data)
# np.any
print(np.any(data > 1.9))
print(np.any(data > 2))
# np.all
print(np.all(data > 1.9))
print(np.all(data < 2))
# np.where
print(np.where(data > 1.9, 100, 0))
# np.logical_and
print(np.logical_and(data < 1 ,data > 0))
# np.logical_or
print(np.logical_or(data <1, data > 0))
# np.logical_not
print(np.logical_not(data < 1))
输出:
data: [-0.37461839 0.44504319 0.26161411 1.577546 -0.48651534 0.01659188 -0.1884015 1.07312405 -0.33878645 1.43585276 -0.96841938 0.68361109 1.44117856 1.23530089 -0.43266593 -0.9815774 1.31613161 1.8734965 1.10581365 -0.1072652 1.30397823 1.06465497 0.16155044 0.84561748 0.28266572 0.75286893 1.10790656 -0.66431448 1.76980978 1.96665882 1.03223232 1.38549433 -0.91277095 -0.46672279 1.62478324 1.23479623 0.52427049 -0.61499829 0.45285272 0.54732046 -0.06620601 -0.86301537 0.31304198 -0.71234617 -0.86436966 1.05448616 1.54757224 -0.62437845 -0.61280798 0.41918001 -0.40732447 1.34486825 0.82224159 0.33050028 1.94608733 1.12686624 -0.34380875 -0.49753511 0.61629642 -0.05973764 1.73461099 -0.74123296 -0.05777791 -0.34258791 1.20999869 1.48562109 1.23369339 -0.46738889 1.57535959 -0.98346276 0.07292951 1.85944475 1.82532916 -0.93085296 1.01904799 -0.507657 0.70439711 -0.27363113 -0.52643226 0.51068846 0.71538544 0.40985724 0.52450172 -0.02874517 1.65949507 -0.24449347 1.58626344 0.90558857 1.09166954 -0.90863922 0.97193391 1.99796726 0.51963643 1.79793725 0.32240861 -0.39991405 1.4115607 1.42301618 -0.82614139 1.37091811] True False False True [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0] [False True True False False True False False False False False True False False False False False False False False False False True True True True False False False False False False False False False False True False True True False False True False False False False False False True False False True True False False False False True False False False False False False False False False False False True False False False False False True False False True True True True False False False False True False False True False True False True False False False False False] [ True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True] [False False False True False False False True False True False False True True False False True True True False True True False False False False True False True True True True False False True True False False False False False False False False False True True False False False False True False False True True False False False False True False False False True True True False True False False True True False True False False False False False False False False False True False True False True False False True False True False False True True False True]
学习地址: