往期数据分析笔记
【笔记】python数据分析——numpy初识1
【笔记】python数据分析——numpy初识2
【笔记】python数据分析——变换与编程中的轴
【笔记】python数据分析——numpy随机数函数
【笔记】python数据分析——numpy数组索引及切片
【笔记】python数据分析——元素级运算及通用函数
条件逻辑运算
import numpy as np
arr1=np.array([1,2,3,4])
arr2=np.array([5,6,7,8])
arr3=np.array([True,False,True,False])
上面我定义了三个数组,但我想实现这样的一个想法:
当arr3中的值为True的时候,我们取出arr1中的数字
当arr3中的值为False的时候,我们取出arr2中的数字
最后我们要实现的应该就是取出1,6,3,8这四个数
花式索引方法
如果掌握了numpy数组索引及切片中的花式索引的话,应该是有思路的
print(arr1[arr3==True])
print(arr2[arr3==False])
运行结果:
[1 3]
[6 8]
但这个是两个数组呀,我希望它是同一个数组,可能又有对numpy数组的变换掌握的兄弟想将两个数组进行合并,我们可以试试
arr11 = arr1[arr3==True]
arr22 = arr2[arr3==False]
arr33 = np.concatenate([arr11,arr22])
print(arr33)
运行结果:
[1, 6, 3, 8]
where(类似python中的if...else)
我们使用where来实现我们上面想要的数据
print(np.where(arr3,arr1,arr2))
运行结果:
[1 6 3 8]
where里面有三个参数,第一个参数是条件,第二个参数是满足第一个参数要如何改变,第三个参数是不满足第一个参数要如何改变
接下来,我们创建一个三行三列的正态分布数组,然后我们把这个数组中大于零的数改为1,小于零的数改为零
arr4 = np.random.randn(3,3)
print(arr4)
print(np.where(arr4>0,1,0))
运行结果:
[[-0.62922747 -0.93531664 -0.09492486]
[ 0.3757405 -0.23420628 0.85395805]
[-0.43451664 1.36696855 0.15523776]]
[[0 0 0]
[1 0 1]
[0 1 1]]
where是可以实现嵌套操作的
我们将上面那个例子再加大一下难度,如果大于零的数我们改为1,小于零但不小于-1的数改为0,小于-1的数我们改为-1
arr5 = np.random.randn(3,3)
print(arr5)
print(np.where(arr5>0,1,np.where(arr5<-1,-1,0)))
运行结果:
[[-1.31958984 0.420699 0.46218665]
[ 0.1276776 0.68922162 0.38048573]
[-0.79035943 -1.32331569 0.39631777]]
[[-1 1 1]
[ 1 1 1]
[ 0 -1 1]]
想给大家留一个小任务,就是创建一个三行三列的数据,然后把大于零的数改为True,小于零的数改为False,如果有兴趣自己试试的可以不往下翻,自己试试
我把上面的那个小任务答案发一下:
arr6 = np.random.randn(3,3)
print(np.where(arr6>0,True,False))
今日鸡汤
不生气要争气,不看破要突破,不嫉妒要欣赏,不托延要积极。心态决定状态,心胸决定格局,眼界决定境界。过错是短暂的遗憾,错过是永远的遗憾。生活就是在细细的回味里散发香味的,同时我们也是在用自己的双手创造着新的惊喜。