今天我们来介绍Python中一个非常常用的包,Numpy。这个包可以说对于数据科学家来说也是必备的一个包,对于做人工智能的同学们,这个包也是使用频度非常高的。那么我们今天就来看一下这个包的一些小技巧。
前面我也写过Pandas的两篇文章,反响也非常不错,看起来大家对于这种小技巧类的文章还是比较感兴趣的。还记得刚学C语言的时候,也是非常热衷于一些别人不知道的技巧,使用起来也非常有成就感。
正所谓兴趣是最好的老师,学编程有两件事情能帮助你迅速的成长和进步。一是好胜之心,二是好为人师,也就是爱炫耀,当然炫耀的是技术。但凡这样的人,作为导师,我是比较喜欢的。或者说我特别喜欢同学们半桶水的状态,中国传统观念讲半桶水晃荡是不好的,其实不然。接下来我来说说这其中的道理。
作为一个导师,必须得知道带的人在什么水平,学到了什么东西,最重要的是他是不是对学习这件事情有着浓厚的兴趣。晃荡也好、炫耀也好,都是兴趣的体现,也能让导师看到他在什么层级。而且这样的人更能接受新的事物,年轻的时候晃荡是一件理所当然的事情,随着知识面的拓宽,自然后面就不晃荡了。这类人后期大抵都能成为孙悟空这样的人才,不是很听话,但是团队里是非常需要这类能解决问题的人,剩下的是需要管理者去做的事情了。
反之,一些三棍子闷不出任何气体的同学,对于导师来说,就需要非常好的沟通技巧和技术能力,甚至需要很深的社会阅历和处事经验。基本上碰到这样的同学,我反而都会参与到和他的导师一起去带他,因为一般的导师是带不动的。
话题又扯的稍微有点远,我们回来看Numpy的一些技巧。
创建Numpy Array
我们可以看到运行结果如下:
那么有同学要问了,这不和列表差不多吗?为什么要转换成Numpy Array呢?我们接下来看下面的例子。
这段代码的运行结果为:
如果我们使用列表,那么则会报错了,列表并不支持这样的操作。
变换Array的数据类型
其运行结果为:
[[0. 1. 2.]
[3. 4. 5.]
[6. 7. 8.]]
当然其他的类型也都可以支持,可以根据你实际的需要来进行操作。
将Array转为列表
其运行结果为:
[[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]]
对Array进行切片
我们仍以上面这段代码为例来进行不同方式的切片。
获取第一行:
print(myArray[:1,:])
运行结果:
获取第一列:
print(myArray[:,:1])
运行结果为:
[[0]
[3]
[6]]
获取2、3行和1、2列:
print(myArray[1:3,0:2])
运行结果为:
[[3 4]
[6 7]]
切片几乎可以获得任何我们需要获得的数据,操作也非常的简单,大家有兴趣的可以看看源代码,非常的简洁高效。
条件选取特定的值
运行结果为:
我们可以看到返回的为一个列表,而列表中是满足条件的值。
反转Array的行或列
我们可以看到,其结果分别为:
和
Numpy里的空值和无穷大
在Numpy里面有两个特殊的值,当我们在读取文件的时候,可能会遇到空值,那么这个值会标记为numpy.nan。如果我们在运算的时候产生了无穷大的数,那么会被标记为numpy.inf。
其运行结果为:
[[nan 1. 2.]
[ 3. inf 5.]
[ 6. 7. 8.]]
而在实际使用的过程中,我们可以用如下的代码来判断并修改这些特殊的值为我们可以运算的值。
其运行结果为:
[[-1. 1. 2.]
[ 3. -2. 5.]
[ 6. 7. 8.]]
计算最大、最小和平均值
其运行结果为:
0.0
8.0
4.0
对Array行列进行变换
其运行结果为:
将二维Array变为一维
其运行结果为:
numpy.arrange的用法
这个其实也很简单,大家看运行结果就明白是怎么一回事了。运行结果如下:
numpy.zeros和numpy.ones
我们仍然来看一个例子。
np.zeros([3,4])
np.ones([3,4])
其运行结果分别为:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
和
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
Numpy中的随机数
生成2x2的随机数Array
print(np.random.rand(2,2))
运行结果:
生成2x2的随机整型Array
print(np.random.randint(0, 10, size=[2,2]))
运行结果:
[[2 2]
[5 0]]
生成一个随机数 print(np.random.random)
运行结果:
从列表中随机选取
print(np.random.choice([1, 2, 3, 4, 5], size=10))
联系客服